Welcome!

Java IoT Authors: Yeshim Deniz, Heitor Faroni, Jeffrey Abbott, Pat Romanski, PagerDuty Blog

Related Topics: Java IoT, Cloud Security

Java IoT: Article

Effective Page Authorization In JavaServer Faces

Application security - the art of applications defending themselves - represents an important line of defence

Application security - the art of applications defending themselves - represents an important line of defence in an overall in-depth security strategy. Web applications that follow the Model-View-Controller (MVC) architecture can, and should, have security implemented on all three layers. Normally it's the controller component that handles page authorization in MVC, the view layer that hides controls and information based on user authorization, and the model that enforces the business rules and input validation. However, it's up to the developer, based on an individual security policy and the programming technology used, to decide where to put security. Using pluggable validator components in JavaServer Faces (JSF), for example, developers may decide to verify user input on the view layer as well as on the model layer.

 JavaServer Faces, the new J2EE standard for building feature-rich Web applications with JEE 1.5, has few integrated security features. JSF generously delegates the task of implementing application security such as page authorization to the application developer, leaving many developers pondering where to start, where best to put security, and which security technology to choose.

This article aims to answer such questions for authorization in JavaServer Faces, demonstrating how a custom PhaseListener that uses J2EE container-managed security can be used to implement access control for JSF pages. Besides page authorization, the security PhaseListener supports protocol switching between HTTP and HTTPS, a common requirement of applications that work with sensitive data on a Web page.

The J2EE Security Choices
The J2EE platform provides two built-in security technologies for the application developer to use: the Java Authentication and Authorization Service (JAAS) and container-managed security, also known as J2EE security.

The Java Authentication and Authorization Service is a J2SE 1.4 security standard designed for the Java desktop that's also used as an implementation technology for security in J2EE. The JAAS authentication infrastructure is built as a Java version of the Pluggable Authentication Module (PAM) architecture that allows one or more authentication providers to be used for user identification. Before JAAS, the Java 2 security platform was code-centric, determining access privileges based solely on the location of the Java sources. Using JAAS, Java security now also looks at the authenticated user when evaluating access control to resources. JAAS's benefit is its ability to implement fine-grained access control through external Java permission classes, which associate users with a list of resources and allowed actions.

Authentication and authorization in J2EE security is configured declaratively in the application's web.xml deployment descriptor and handled by the J2EE container at runtime. Working with APIs defined in the J2EE servlet standard, application developers don't have to worry about the implementation of security in a container. In container-managed security, authorization is enforced on URL patterns, which are absolute or relative URLs. This however also means that authorization is only enforced on requests that are initiated by the client, not as server-side forward requests.

Ease of use, the clean separation of security definition and application code, and portability across application servers are the main reasons for the wide adoption of container-managed security among business application developers. J2EE security is sufficient to implement many common security use cases. As a reflection of its popularity and its portability, container-managed security is used in the code examples of this article to illustrate effective page authorization in JavaServer Faces.

Container-Managed Security in J2EE
In container-managed security, a user is granted access to protected URL resources through security roles defined in the web.xml deployment descriptor. Security roles in J2EE are logical names used in Web applications that are mapped during or after deployment to user groups that exist on the target application server platform.

Listing 1 Web.xml excerpt granting the app_user security role access to the protected URL resource /faces/protected/*

<security-constraint>
    <Web-resource-collection>
    <Web-resource-name>Members</Web-resource-name>
    <url-pattern>/faces/protected/*</url-pattern>
    </Web-resource-collection>
    <auth-constraint>
       <role-name>app_user</role-name>
    </auth-constraint>
</security-constraint>
...
<security-role>
    <role-name>app_user</role-name>
</security-role>

To access a protected application resource, Web application users must first authenticate, which in container-managed security is handled by the J2EE container. Either the application developer or the application deployer configures the type of authentication in the web.xml deployment descriptor.

Listing 2 Basic authentication defined for the jazn.com realm

<login-config>
     <auth-method>BASIC</auth-method>
     <realm-name>jazn.com</realm-name>
</login-config>

To check authorization programmatically in an J2EE application - like in JavaServer Faces - application developers use the isUserInRole method in the servlet API. This isUserInRole method is also exposed via a convenience method in JavaServer Faces through the static FacesContext class. Role names referenced in application code ought to be mapped to roles defined in the web.xml file using the <security-role-ref> element if the role names don't match. Using the <security-role-ref> element, developers don't have to be aware of the security role names that exist in the web.xml descriptor when developing an application.

Listing 3 Mapping the "user" role name used in the application code to the security role name "manager_role" defined in the web.xml file

<security-role-ref>
     <role-name>user</role-name>
     <role-link>app_user</role-link>
</security-role-ref>

If the authenticated user isn't authorized to access the requested URL resource, the J2EE container responds with HTTP error 403, indicating a bad request. A HTTP error 401 is returned if a user cancels the authentication process. HTTP error codes and Java exceptions are handled declaratively in the web.xml file using the <error-page> element.

Listing 4 Redirecting a request in response to unauthorized page access handling error code 403 and 401

<error-page>
     <error-code>403</error-code>
     <location>Error.jsp</location>
</error-page>
<error-page>
     <error-code>401</error-code>
     <location>Logon_cancelled.jsp</location>
</error-page>

If SSL is required to ensure secure communication when accessing a specific Web resource, the <security-constraint> element added for a protected resource contains an additional <user-data-constraint> element. Setting the transport guarantee to "confidential" indicates that SSL is required.


More Stories By Duncan Mills

Duncan Mills is senior director of product management for Oracle's Application Development Tools - including the JDeveloper IDE, and the Oracle Application Development Framework. He has been in the IT industry for the past 19 years working with Oracle, Java, and a variety of more obscure programming languages and frameworks along the way. Duncan is the co-author of the Oracle Press book: Oracle JDeveloper 10g for Forms and PL/SQL Developers - a Guide to Web Development with Oracle ADF.

More Stories By Frank Nimphius

Frank Nimphius is a principal product manager for application development tools at Oracle Corporation. As a conference speaker, Frank represents the Oracle J2EE development team at J2EE conferences world wide, including various Oracle user groups and the Oracle Open World conference.

Comments (6) View Comments

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.


Most Recent Comments
y_alomoush 09/01/08 04:29:19 PM EDT

Hi Duncan and Frank,

Thanks for your great efforts.

It is a job well done. In fact,I have installed the module and plugged it to my own application for evaluation purposes.However, I have found a scenario where a user can access into a unauthorized page, I don't know if I can call it as a bug or not.

The scenario is as the following:
1-start the application by calling a page that requires authentication and authorization.
2-the system shall direct you to the login page.

3-enter a correct username/password but not authorized to access that page.

3-system shall redirect you to error page using the sendError method.

4-call the same page again (using the same session). the system strangely forward you to the page that you are not authorized to access.(because the page is already cached as an authorized page)

I think after the page is redirected to the error page the handleSecurity method must return, in this case, false instead of retuning true, this in order not to cache an unauthorized page.

Thank yo once again.

keerthi 09/21/06 10:22:56 AM EDT

Hi Duncan and Frank,

This article is really an interesting one. I found it at a right moment of time as I was trying to implement Page level security in a Project based on JSF.
I was wondering the article is based on Container-Managed Security or reading roles from web.xml. I have a requirement where I need to read the roles from database and not from web.xml, can I achieve this security feature by implementing the points mentioned in this article.
Awaiting for your response.
Thanks and Regards,
Keerthi.

SYS-CON Italy News Desk 08/10/06 05:42:31 PM EDT

Application security - the art of applications defending themselves - represents an important line of defence in an overall in-depth security strategy. Web applications that follow the Model-View-Controller (MVC) architecture can, and should, have security implemented on all three layers. Normally it's the controller component that handles page authorization in MVC, the view layer that hides controls and information based on user authorization, and the model that enforces the business rules and input validation. However, it's up to the developer, based on an individual security policy and the programming technology used, to decide where to put security. Using pluggable validator components in JavaServer Faces (JSF), for example, developers may decide to verify user input on the view layer as well as on the model layer.

AJAXWorld News Desk 08/10/06 05:26:41 PM EDT

Application security - the art of applications defending themselves - represents an important line of defence in an overall in-depth security strategy. Web applications that follow the Model-View-Controller (MVC) architecture can, and should, have security implemented on all three layers. Normally it's the controller component that handles page authorization in MVC, the view layer that hides controls and information based on user authorization, and the model that enforces the business rules and input validation. However, it's up to the developer, based on an individual security policy and the programming technology used, to decide where to put security. Using pluggable validator components in JavaServer Faces (JSF), for example, developers may decide to verify user input on the view layer as well as on the model layer.

JDJ News Desk 07/26/06 05:18:34 PM EDT

Application security - the art of applications defending themselves - represents an important line of defence in an overall in-depth security strategy. Web applications that follow the Model-View-Controller (MVC) architecture can, and should, have security implemented on all three layers. Normally it's the controller component that handles page authorization in MVC, the view layer that hides controls and information based on user authorization, and the model that enforces the business rules and input validation. However, it's up to the developer, based on an individual security policy and the programming technology used, to decide where to put security. Using pluggable validator components in JavaServer Faces (JSF), for example, developers may decide to verify user input on the view layer as well as on the model layer.

JDJ News Desk 07/26/06 04:40:02 PM EDT

Application security - the art of applications defending themselves - represents an important line of defence in an overall in-depth security strategy. Web applications that follow the Model-View-Controller (MVC) architecture can, and should, have security implemented on all three layers. Normally it's the controller component that handles page authorization in MVC, the view layer that hides controls and information based on user authorization, and the model that enforces the business rules and input validation. However, it's up to the developer, based on an individual security policy and the programming technology used, to decide where to put security. Using pluggable validator components in JavaServer Faces (JSF), for example, developers may decide to verify user input on the view layer as well as on the model layer.

@ThingsExpo Stories
SYS-CON Events announced today that Outlyer, a monitoring service for DevOps and operations teams, has been named “Bronze Sponsor” of SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Outlyer is a monitoring service for DevOps and Operations teams running Cloud, SaaS, Microservices and IoT deployments. Designed for today's dynamic environments that need beyond cloud-scale monitoring, we make monitoring effortless so you ...
SYS-CON Events announced today that CA Technologies has been named “Platinum Sponsor” of SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY, and the 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CA Technologies helps customers succeed in a future where every business – from apparel to energy – is being rewritten by software. From ...
Why do your mobile transformations need to happen today? Mobile is the strategy that enterprise transformation centers on to drive customer engagement. In his general session at @ThingsExpo, Roger Woods, Director, Mobile Product & Strategy – Adobe Marketing Cloud, covered key IoT and mobile trends that are forcing mobile transformation, key components of a solid mobile strategy and explored how brands are effectively driving mobile change throughout the enterprise.
SYS-CON Events announced today that Technologic Systems Inc., an embedded systems solutions company, will exhibit at SYS-CON's @ThingsExpo, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Technologic Systems is an embedded systems company with headquarters in Fountain Hills, Arizona. They have been in business for 32 years, helping more than 8,000 OEM customers and building over a hundred COTS products that have never been discontinued. Technologic Systems’ pr...
SYS-CON Events announced today that SoftLayer, an IBM Company, has been named “Gold Sponsor” of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York, New York. SoftLayer, an IBM Company, provides cloud infrastructure as a service from a growing number of data centers and network points of presence around the world. SoftLayer’s customers range from Web startups to global enterprises.
Artificial Intelligence has become a topic of intense interest throughout the cloud developer and enterprise IT communities. Accordingly, attendees at the upcoming Cloud Expo | @ThingsExpo at the Javits Center in New York, June 6-8, will find fresh new content in a new track called Cognitive Computing | Artificial Intelligence, Machine Learning, Deep Learning. Cloud Expo is still accepting submissions for this new track, so please visit www.cloudcomputingexpo.com for the latest information. 2...
SYS-CON Events announced today that Tintri, Inc, a leading provider of enterprise cloud infrastructure, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Tintri offers an enterprise cloud platform built with public cloud-like web services and RESTful APIs. Organizations use Tintri all-flash storage with scale-out and automation as a foundation for their own clouds – to build agile development environments...
SYS-CON Events announced today that CA Technologies has been named “Platinum Sponsor” of SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY, and the 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CA Technologies helps customers succeed in a future where every business – from apparel to energy – is being rewritten by software. From ...
In his General Session at 17th Cloud Expo, Bruce Swann, Senior Product Marketing Manager for Adobe Campaign, explored the key ingredients of cross-channel marketing in a digital world. Learn how the Adobe Marketing Cloud can help marketers embrace opportunities for personalized, relevant and real-time customer engagement across offline (direct mail, point of sale, call center) and digital (email, website, SMS, mobile apps, social networks, connected objects).
More and more brands have jumped on the IoT bandwagon. We have an excess of wearables – activity trackers, smartwatches, smart glasses and sneakers, and more that track seemingly endless datapoints. However, most consumers have no idea what “IoT” means. Creating more wearables that track data shouldn't be the aim of brands; delivering meaningful, tangible relevance to their users should be. We're in a period in which the IoT pendulum is still swinging. Initially, it swung toward "smart for smart...
Buzzword alert: Microservices and IoT at a DevOps conference? What could possibly go wrong? In this Power Panel at DevOps Summit, moderated by Jason Bloomberg, the leading expert on architecting agility for the enterprise and president of Intellyx, panelists peeled away the buzz and discuss the important architectural principles behind implementing IoT solutions for the enterprise. As remote IoT devices and sensors become increasingly intelligent, they become part of our distributed cloud enviro...
20th Cloud Expo, taking place June 6-8, 2017, at the Javits Center in New York City, NY, 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.
SYS-CON Events announced today that Hitrons Solutions 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. Hitrons Solutions Inc. is distributor in the North American market for unique products and services of small and medium-size businesses, including cloud services and solutions, SEO marketing platforms, and mobile applications.
SYS-CON Events announced today that TMC has been named “Media Sponsor” of SYS-CON's 20th International Cloud Expo and Big Data at Cloud Expo, which will take place on June 6–8, 2017, at the Javits Center in New York City, NY, , and the 21st International Cloud Expo, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Global buyers rely on TMC’s content-driven marketplaces to make purchase decisions and navigate markets. Learn how we can he...
"I think that everyone recognizes that for IoT to really realize its full potential and value that it is about creating ecosystems and marketplaces and that no single vendor is able to support what is required," explained Esmeralda Swartz, VP, Marketing Enterprise and Cloud at Ericsson, in this SYS-CON.tv interview at @ThingsExpo, held June 7-9, 2016, at the Javits Center in New York City, NY.
In his session at @ThingsExpo, Steve Wilkes, CTO and founder of Striim, will delve into four enterprise-scale, business-critical case studies where streaming analytics serves as the key to enabling real-time data integration and right-time insights in hybrid cloud, IoT, and fog computing environments. As part of this discussion, he will also present a demo based on its partnership with Fujitsu, highlighting their technologies in a healthcare IoT use-case. The demo showcases the tracking of patie...
SYS-CON Events announced today that SD Times | BZ Media has been named “Media Sponsor” of SYS-CON's 20th International Cloud Expo, which will take place on June 6–8, 2017, at the Javits Center in New York City, NY. BZ Media LLC is a high-tech media company that produces technical conferences and expositions, and publishes a magazine, newsletters and websites in the software development, SharePoint, mobile development and commercial UAV markets.
SYS-CON Events announced today that Linux Academy, the foremost online Linux and cloud training platform and community, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Linux Academy was founded on the belief that providing high-quality, in-depth training should be available at an affordable price. Industry leaders in quality training, provided services, and student certification passes, its goal is to c...
SYS-CON Events announced today that delaPlex will exhibit at SYS-CON's @CloudExpo, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. delaPlex pioneered Software Development as a Service (SDaaS), which provides scalable resources to build, test, and deploy software. It’s a fast and more reliable way to develop a new product or expand your in-house team.
SYS-CON Events announced today that MobiDev, a client-oriented software development company, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place June 6-8, 2017, at the Javits Center in New York City, NY, and the 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. MobiDev is a software company that develops and delivers turn-key mobile apps, websites, web services, and complex softw...