Hi,I'm building a website using form based authentication integrating with JAAS 
for user based authentication. I don't have issue when a successful credential 
is authenticated. Rather I'm having difficulty understanding the flow of JAAS 
back to the client should the form based authentication failed.SOFTWARE:1. 
Apache Tomee plus 1.7.12. Java 83. Tomcat JAAS RealmOBJECTIVE:Custom error 
captured in JAAS login module to propagate to error pageBASIC UNDERSTANDING:The 
Tomcat JAAS layer is not integrated with the web container layer. Hence the 
former does not have access to request, session etc.SOLUTION:Using ThreadLocal 
which capture the custom error message in JAAS layer to be used when the flow 
reaches back to the custom valve on the way back to the 
browser.PROBELM:Understanding of basic request/response flow involving Tomcat 
and JAASa. request --> valve --> JAAS --> Filter --> Servlet/JSP    b. response 
<-- valve (**) <-- JAAS <-- Filter <-- Servlet/JSP(refer to above clause 
b)ThreadLocal in the JAAS layer managed to capture the custom error message and 
it i managed to print it after the getNext() method of the custom valve. 
Thought of adding this custom error as an attribute in the session 
object.However I noticed that the error page is already displayed before i 
could add this cusom error (immediately after the getNext method).Due to that 
the ready custom error message cannot be usedSAMPLE CODES:1. web.xml    
<login-config>    <auth-method>FORM</auth-method>    <form-login-config>      
<form-login-page>/login.jsp</form-login-page>      
<form-error-page>/login-redirect-error.jsp?error=true</form-error-page>    
</form-login-config>    </login-config>    2. Custom valve and defined in 
META-INF/context.xml    public class SecurityValve extends ValveBase {    
public void invoke(Request request, Response response) throws IOException, 
ServletException {           getNext().invoke(request, response);           
system.out.println("after getNext()"); --> break point (BP)      }    }1. Did a 
break point on SecurityValve (indicated at BP)     2. On forms, i purposely 
enter wrong credential and submit         3. Break point stops at BP     4. 
login-redirect-error.jsp displayed already    5. Since it stop at break point 
BP in SecurityValve, the response back to client flow has not reached the 
browser. Yet the login-redirect-error.jsp is already displayedQUESTIONS:   How 
can the login-redirect-error.jsp be displayed on the browser when the response 
flowing back to client stop at break point BP? The flow back to the client is 
not fully done yet.I would really appreciate any help.Thanks.
                                          

Reply via email to