We have a solution for Web applications deployed on same JBoss Instance to 
delegate Authentication to different co-hosted web application.


Essentially For Web Application/Module ABC1, ABC2, , a Servlet Filter checks 
for Request/Session parameters (for example USER_NAME, etc). If the Servlet 
Filter does not find a user in request/session, then it forwards the Request to 
the LOGON_XYZ Web App responsible for Authentication.

The LOGON_XYZ web application authenticates the User by validating the 
credentials provided by the User.

Once the User is successfully Authenticated, the LOGON_XYZ web application a) 
Sets the User information in the Request b) forwards the Request to the ABC1 
web application.  The ABC1 Web app Servlet Filter checks and finds a User in 
the Request and allows User to continue to the requested page flow.

The Servlet Filter code is somewhat like this



  | package somepackage;
  | 
  | import java.io.IOException;
  | import javax.servlet.Filter;
  | import javax.servlet.FilterChain;
  | import javax.servlet.FilterConfig;
  | import javax.servlet.RequestDispatcher;
  | import javax.servlet.ServletContext;
  | import javax.servlet.ServletException;
  | import javax.servlet.ServletRequest;
  | import javax.servlet.ServletResponse;
  | import javax.servlet.http.HttpServletRequest;
  | import javax.servlet.http.HttpSession;
  | 
  | /**
  |  * 
  |  * MyServletFilter intercepts host web applications requests inspects to 
verify if a User is logged in.
  |  * If a User is not logged in to the Host web application, the User is 
forwarded to the LOGON_XYZ Web application for Authentication.
  |  * @author parmarv
  |  *
  |  */
  | 
  | public class MyServletFilter implements Filter {
  | 
  | 
  |     private FilterConfig filterConfig = null;
  | 
  |     // This method is called once on server startup
  |     public void init(FilterConfig filterConfig) {
  |             this.filterConfig = filterConfig;
  |     }
  |     // This method is called once on server shut down
  |     public void destroy() {
  |             this.filterConfig = null;
  |     }
  |     
  |     public void doFilter(ServletRequest request, ServletResponse response,
  |                     FilterChain chain) throws IOException, ServletException 
{
  | 
  |             // Check if Attribute for this SessionID is available in the 
ServletContext.
  |             boolean invokeLOGON_XYZ = false;
  |             if (request instanceof HttpServletRequest) {
  |                     HttpSession session = ((HttpServletRequest) request)
  |                                     .getSession(true);
  |                     if (session != null && session.isNew()) {
  |                             // Invoke LOGON_XYZ.
  |                             invokeLOGON_XYZ = true;
  |                     } else {
  |                             // Check For User in Session
  |                             if 
(session.getAttribute("USER_NAME_TOKEN_OR_ID") == null) {
  |                                     // User is not logged in since 
USER_NAME_TOKEN_OR_ID is not available.
  |                                     // Invoke LOGON_XYZ
  |                                     invokeLOGON_XYZ = true;
  |                             }else{
  |                                     // User is logged in since 
USER_NAME_TOKEN_OR_ID is available.
  |                                     // Continue normal operation
  |                                     chain.doFilter(request, response);
  |                             }
  |                             if(invokeLOGON_XYZ){
  |                                     if (filterConfig != null) {
  |                                             String appContextLOGON_XYZ  = 
filterConfig.getInitParameter("LOGON_XYZ_CONTEXT");
  |                                             String dispatchPath = 
"/ABC1_User_home.jsp";
  |                                             ServletContext sc = 
this.filterConfig.getServletContext().getContext("/"+appContextLOGON_XYZ);
  |                                             RequestDispatcher rd = 
sc.getRequestDispatcher(dispatchPath);
  |                                             rd.forward(request, response);
  |                                             return;
  |                                     }
  |                             }
  |                     }
  |             }
  |             chain.doFilter(request, response);
  |             return;
  |     }
  | }
  | 
  | 

This solution only works for Web application that DO NOT use JBoss Container 
Managed Security. This solution is advisable for a work around solution only. I 
am currently working on a solution for the same for the current issue for my 
project.

I have posted this solution only to show that it is possible to use a second 
web app to delegate the authentication logic to.

HTH,

vparmar



View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4210866#4210866

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4210866
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to