Welcome!

Java IoT Authors: Elizabeth White, Liz McMillan, Greg O'Connor, JP Morgenthal, Sematext Blog

Related Topics: Open Source Cloud, Java IoT, Microservices Expo, Apache

Open Source Cloud: Article

Valve, JAAS and Filter in Tomcat

Their usages and relationships

Tomcat is a widely popular lightweight application server. When securing Tomcat web applications, Valve, JAAS and Filter are used in various scenarios. The challenges for developers are when to use each of these methods and how to integrate them together if more than one method is chosen. For example, the WebSeal agent discussed in the article [1] uses Valve. If a customer needs to integrate WebSeal and its own JAAS-based authentication module, they will need to know how to configure Tomcat to use both the WebSeal Agent Valve and the JAAS module and how to pass information between them.

In this article, we will explain the concepts of Valve, JAAS and Filter, and their relationships such as the order that they get called. Through an example application, we will explain how you can use them together and pass information among them for an authentication process. How to configure and run the example application using Tomcat 7 will also be discussed.

The Concepts
Valve

A Valve is a piece of Java code that can be inserted into the request processing pipeline. The Valve can be defined on a different scope such as Engine, Host and Context. Tomcat comes with a set of pre-built valves that can be found here [2]. However, developers can write their own Valve and participate in the processing of the Valve chain. The main requirements for a Valve are:

  • It needs to extend ValveBase
  • It needs to call getNext().invoke(request, response) to chain other Valves.

For example, Listing 1 is a simple Valve. (Listings 1 - 5 can be downloaded here.) That Valve also has a method that may call an external policy server to verify the user. It may retrieve the user information passed in as a token in the HTTP header field such as the one used in [1]. You can ignore the ThreadLocale part in the Listing 1, which will be discussed later.

JAAS
Java Authentication and Authorization Service (JAAS) [3] is a security framework that allows a user's program to participate in the authentication and authorization process. JAAS also serves as an integration point to allow different user-specific security implementations to be used. JAAS is supported in Tomcat through its JAASRealm interface [4].

When JAASRealm is used, a user will need to provide a login module and the appropriate configurations: a configuration file and a security configuration in the web.xml. Once it's configured properly, the login module will be called and managed by the Tomcat.

Listing 2 has a sample JAAS login module. This login module will use a callback to get the userid and password. It will check whether the password is the reverse of the userid. If the check succeeds, it will create a principal based on the username and assign the role "jvalve" to the principal.

Filter
A filter is part of the Java Servlet specification [5]. A filter can be inserted into the request processing pipeline. It will be executed before the servlet is called and invoked again when the servlet process is done. Multiple filters can be chained together and thus can be used as an integration point for different users who want to use the filter to accomplish certain cross-cutting functions. The main requirements for a filter are:

  • It needs to extend javax.servlet.Filter.
  • It needs to call chain.doFilter(request, response).

Listing 3 shows an example filter. This filter simply calculates the time used to complete the request.

The Relationships
All three technologies, Valve, JAAS and Filter, have the following commonalities:

  • Run before the servlet is invoked
  • Allow cross-cutting functions to be implemented.
  • Provide integration points to allow multiple Valves, login modules and filters to be defined by different users.
  • Provide a common place for implementing security features.

Even though JAAS is the official method for providing security implementations, Valve and filter have been used to implement securities frequently. Especially in the Tomcat case, it is relatively hard to get a Subject in the application code (JBoss has a SharedState, WebLogic and WebSphere all provide a static method to make the "Subject" available for the application code). Implementations may use Valve for the authentication and then set the authenticated principal on the request for the filter and application code to use.

However, it's also important to understand their differences especially if you want to use them together.

  • The order that they get invoked is as follows: Valve, JAAS module, Filter and then Servlet.
  • Valve and Filter have access to a request/response/session, etc. However, JAAS only has access to the shared state. It can interact with the Tomcat container to retrieve such things as security information, but can only do so through callbacks.

Because of the above differences, it becomes a challenge if you want to use all three of them together and pass information among them. Consider the following example. Tivilo WebSeal provides a Valve engine that will set an authenticated user on the request. Your company has been using the JAAS module for the additional authentication purpose. The JAAS module will want to retrieve that authenticated user from the Valve. Tomcat will not help in this case. In the next session, we'll discuss a ThreadLocale [6] solution to address this issue.

The Sample Application
The sample application uses the Valve, the JAAS login module and the filter in Listings 1, 2, and 3. However, we want to retrieve a key in the Valve and pass it to the JAAS login module. We will use the ThreadLocale to accomplish this. Listing 4 shows the ThreadLocale class.

In Listing 1, we have set the "key" to the ThreadLocale. In Listing 2 of the JAAS code, we have code to retrieve the "key" from the ThreadLocale (it is commented out). We define the value of the password as the reverse of the username plus the key (it's commented out in Listing 2 as well).

The web.xml, which protects the secured resource and defines the filter, is listed in Listing 5.

The JAAS login module can be defined in the following login.config file:

MyAccess {
com.sas.tcserver.SampleLoginModule required
debug=true;
};

This same ThreadLocale concept can be used if a user wants to pass information from the JAAS login module to the filter.

Issues with Tomcat 6
If you are using Tomcat 6 and plan to create a user principal at the Valve, the JAAS login module will not be called by Tomcat.

For example, you have the following code in your Valve's "invoke()" method:

GenericPrincipal genericprincipal = new
GenericPrincipal(request.getContext().getRealm(), "user", null,
arraylist
, null);
request.setUserPrincipal(genericprincipal);

This problem does not occur at Tomcat 7. It should note that the construct for GenericPrincipal has been changed from 6 to 7. In Tomcat 7, you will do:

GenericPrincipal genericprincipal = new
GenericPrincipal("user", null, arraylist, null);
request.setUserPrincipal(genericprincipal);

Configure and Run the Sample Application
The sample application is packaged into the following files: 1) A src folder, which contains all source code; 2) securityvalve.jar; 3) loginmodule war file, which includes the sampleloginmodule.jar and timerfilter.jar. The files can be downloaded from here.

To run the application, complete the following process:

  • Download and install Tomcat 7.
  • Unzip the downloaded file.
  • Copy securityvalve.jar into Tomcat lib directory
  • Copy loginmodule war (in exploded format) into Tomcat webapps directory
  • Add the following xml piece into Tomcat conf/server.xml file inside Services -> Engine -> Host:

<Context path="/loginmodule">
<Realm
className="org.apache.catalina.realm.JAASRealm           
appName="MyAccess"          
userClassNames="com.sas.tcserver.SampleUserPrincipal"        
roleClassNames="com.sas.tcserver.SampleRolePrincipal"/>

<Valve className="com.sas.tcserver.SecurityValve"
debugTrace="true"/>
</Context>

  • Create login.config file in Tomcat conf directory using the content in the previous section.
  • Update Tomcat startup command to add the following parameter:

-Djava.security.auth.login.config=%CATALINA_BASE%\conf\login.config

  • Start Tomcat
  • Access the application in Web browser using the following URL: http://localhost:8080/loginmodule/index.html. When prompted, type in "jvalve/velavjsas" as username/password, you should see the following output in the Tomcat console:

Security Valve: invoke
SampleLoginModule: initialize
SampleLoginModule - initialize - subject: Subject:

SampleLoginModule - initialize - sharedState: {}
SampleLoginModule: login
SampleUserPrincipal
SampleLoginModule: commit
SampleRolePrincipal
SampleLoginModule: commit successful
TimerFilter: Time to execute request: 2 milliseconds
Security Valve: exit invoke

In the above output, you may notice that the Valve works like filters but is called before and after JAAS and the filters. We use the password "velavjsas", which is the reverse of username "jvalve" plus the key that is passed from the Valve to the JAAS module using the ThreadLocale.

Conclusion
Valve, JAAS and Filter are common technologies in Tomcat. However, to configure and use them together requires a basic understanding of their relationships. This article explained the concepts and demonstrated their usages and relationships through a sample application. The sample application can be easily expanded and used in various authentication processes.

The concept discussed here can also be used in other Tomcat based application servers such as the VMware vFabric tc Server [7].

Resources

  1. How do I integrate SSO on Apache Tomcat
  2. Apache Tomcat 7: The Valve Component
  3. All that JAAS
  4. Tomcat Class JAASRealm
  5. The Essentials of Filters
  6. ThreadLocale
  7. VMware vFabric tc Server

More Stories By Zhiyong Li

Zhiyong Li is a senior manager of SAS Platform Division and the chair of the Java Technology Board at SAS institute. He started coding in Java in 1995 as a Sun’s development staff. He worked at IBM and iBiomatics as lead architect and developer for several enterprises Java applications. He holds a Ph.D from Computer Science Department of Duke University. He has published many papers in AI, parallel computation and program languages. He has also published several patents.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


@ThingsExpo Stories
Today we can collect lots and lots of performance data. We build beautiful dashboards and even have fancy query languages to access and transform the data. Still performance data is a secret language only a couple of people understand. The more business becomes digital the more stakeholders are interested in this data including how it relates to business. Some of these people have never used a monitoring tool before. They have a question on their mind like “How is my application doing” but no id...
The 19th International Cloud Expo has announced that its Call for Papers is open. Cloud Expo, to be held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, brings together Cloud Computing, Big Data, Internet of Things, DevOps, Digital Transformation, Microservices and WebRTC to one location. With cloud computing driving a higher percentage of enterprise IT budgets every year, it becomes increasingly important to plant your flag in this fast-expanding business opportuni...
Identity is in everything and customers are looking to their providers to ensure the security of their identities, transactions and data. With the increased reliance on cloud-based services, service providers must build security and trust into their offerings, adding value to customers and improving the user experience. Making identity, security and privacy easy for customers provides a unique advantage over the competition.
19th Cloud Expo, taking place November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy. Meanwhile, 94% of enterpri...
Smart Cities are here to stay, but for their promise to be delivered, the data they produce must not be put in new siloes. In his session at @ThingsExpo, Mathias Herberts, Co-founder and CTO of Cityzen Data, will deep dive into best practices that will ensure a successful smart city journey.
SYS-CON Events announced today that 910Telecom will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Housed in the classic Denver Gas & Electric Building, 910 15th St., 910Telecom is a carrier-neutral telecom hotel located in the heart of Denver. Adjacent to CenturyLink, AT&T, and Denver Main, 910Telecom offers connectivity to all major carriers, Internet service providers, Internet backbones and ...
There is growing need for data-driven applications and the need for digital platforms to build these apps. In his session at 19th Cloud Expo, Muddu Sudhakar, VP and GM of Security & IoT at Splunk, will cover different PaaS solutions and Big Data platforms that are available to build applications. In addition, AI and machine learning are creating new requirements that developers need in the building of next-gen apps. The next-generation digital platforms have some of the past platform needs a...
SYS-CON Events announced today Telecom Reseller has been named “Media Sponsor” of SYS-CON's 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Telecom Reseller reports on Unified Communications, UCaaS, BPaaS for enterprise and SMBs. They report extensively on both customer premises based solutions such as IP-PBX as well as cloud based and hosted platforms.
I wanted to gather all of my Internet of Things (IOT) blogs into a single blog (that I could later use with my University of San Francisco (USF) Big Data “MBA” course). However as I started to pull these blogs together, I realized that my IOT discussion lacked a vision; it lacked an end point towards which an organization could drive their IOT envisioning, proof of value, app dev, data engineering and data science efforts. And I think that the IOT end point is really quite simple…
Internet of @ThingsExpo, taking place November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 19th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The Internet of Things (IoT) is the most profound change in personal and enterprise IT since the creation of the Worldwide Web more than 20 years ago. All major researchers estimate there will be tens of billions devices - comp...
DevOps at Cloud Expo, taking place Nov 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 19th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time to wait for long dev...
Data is the fuel that drives the machine learning algorithmic engines and ultimately provides the business value. In his session at Cloud Expo, Ed Featherston, a director and senior enterprise architect at Collaborative Consulting, will discuss the key considerations around quality, volume, timeliness, and pedigree that must be dealt with in order to properly fuel that engine.
Pulzze Systems was happy to participate in such a premier event and thankful to be receiving the winning investment and global network support from G-Startup Worldwide. It is an exciting time for Pulzze to showcase the effectiveness of innovative technologies and enable them to make the world smarter and better. The reputable contest is held to identify promising startups around the globe that are assured to change the world through their innovative products and disruptive technologies. There w...
Personalization has long been the holy grail of marketing. Simply stated, communicate the most relevant offer to the right person and you will increase sales. To achieve this, you must understand the individual. Consequently, digital marketers developed many ways to gather and leverage customer information to deliver targeted experiences. In his session at @ThingsExpo, Lou Casal, Founder and Principal Consultant at Practicala, discussed how the Internet of Things (IoT) has accelerated our abil...
With so much going on in this space you could be forgiven for thinking you were always working with yesterday’s technologies. So much change, so quickly. What do you do if you have to build a solution from the ground up that is expected to live in the field for at least 5-10 years? This is the challenge we faced when we looked to refresh our existing 10-year-old custom hardware stack to measure the fullness of trash cans and compactors.
The emerging Internet of Everything creates tremendous new opportunities for customer engagement and business model innovation. However, enterprises must overcome a number of critical challenges to bring these new solutions to market. In his session at @ThingsExpo, Michael Martin, CTO/CIO at nfrastructure, outlined these key challenges and recommended approaches for overcoming them to achieve speed and agility in the design, development and implementation of Internet of Everything solutions wi...
Cloud computing is being adopted in one form or another by 94% of enterprises today. Tens of billions of new devices are being connected to The Internet of Things. And Big Data is driving this bus. An exponential increase is expected in the amount of information being processed, managed, analyzed, and acted upon by enterprise IT. This amazing is not part of some distant future - it is happening today. One report shows a 650% increase in enterprise data by 2020. Other estimates are even higher....
Is the ongoing quest for agility in the data center forcing you to evaluate how to be a part of infrastructure automation efforts? As organizations evolve toward bimodal IT operations, they are embracing new service delivery models and leveraging virtualization to increase infrastructure agility. Therefore, the network must evolve in parallel to become equally agile. Read this essential piece of Gartner research for recommendations on achieving greater agility.
SYS-CON Events announced today that Venafi, the Immune System for the Internet™ and the leading provider of Next Generation Trust Protection, will exhibit at @DevOpsSummit at 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Venafi is the Immune System for the Internet™ that protects the foundation of all cybersecurity – cryptographic keys and digital certificates – so they can’t be misused by bad guys in attacks...
For basic one-to-one voice or video calling solutions, WebRTC has proven to be a very powerful technology. Although WebRTC’s core functionality is to provide secure, real-time p2p media streaming, leveraging native platform features and server-side components brings up new communication capabilities for web and native mobile applications, allowing for advanced multi-user use cases such as video broadcasting, conferencing, and media recording.