[jboss-cvs] jboss-seam/src/main/org/jboss/seam/web ...
Shane Bryzak
sbryzak at redhat.com
Sun May 27 05:24:31 EDT 2007
User: sbryzak2
Date: 07/05/27 05:24:31
Modified: src/main/org/jboss/seam/web HttpAuthFilter.java
Log:
JBSEAM-743
Revision Changes Path
1.5 +46 -7 jboss-seam/src/main/org/jboss/seam/web/HttpAuthFilter.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: HttpAuthFilter.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/web/HttpAuthFilter.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- HttpAuthFilter.java 25 May 2007 01:33:21 -0000 1.4
+++ HttpAuthFilter.java 27 May 2007 09:24:31 -0000 1.5
@@ -8,12 +8,14 @@
import java.util.HashMap;
import java.util.Map;
+import javax.faces.event.PhaseId;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import org.jboss.seam.annotations.Filter;
import org.jboss.seam.annotations.Install;
@@ -23,7 +25,9 @@
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.contexts.Context;
+import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.contexts.WebSessionContext;
+import org.jboss.seam.core.Manager;
import org.jboss.seam.log.Log;
import org.jboss.seam.security.Identity;
import org.jboss.seam.security.NotLoggedInException;
@@ -152,6 +156,7 @@
{
identity.setUsername(username);
identity.setPassword(password);
+ identity.authenticateNextRequest();
}
}
@@ -204,8 +209,10 @@
}
identity.setUsername(headerMap.get("username"));
+ identity.authenticateNextRequest();
DigestRequest digestRequest = new DigestRequest();
+ digestRequest.setHttpMethod(request.getMethod());
digestRequest.setSystemRealm(realm);
digestRequest.setRealm(headerMap.get("realm"));
digestRequest.setKey(key);
@@ -220,6 +227,7 @@
{
digestRequest.validate();
ctx.set(DigestRequest.DIGEST_REQUEST, digestRequest);
+ authenticate(request, identity);
}
catch (DigestValidationException ex)
{
@@ -229,6 +237,11 @@
if (ex.isNonceExpired()) nonceExpired = true;
}
+ catch (Exception ex)
+ {
+ log.error("Error authenticating: " + ex.getMessage());
+ requireAuth = true;
+ }
}
if (!identity.isLoggedIn() && !identity.isCredentialsSet())
@@ -249,7 +262,7 @@
requireAuth = true;
}
- if (requireAuth || !identity.isLoggedIn())
+ if (requireAuth && !identity.isLoggedIn())
{
long expiryTime = System.currentTimeMillis() + (nonceValiditySeconds * 1000);
@@ -270,6 +283,32 @@
}
}
+ private void authenticate(HttpServletRequest request, Identity identity)
+ throws Exception
+ {
+ try
+ {
+ HttpSession session = request.getSession(true);
+ Lifecycle.setPhaseId(PhaseId.INVOKE_APPLICATION);
+ Lifecycle.setServletRequest(request);
+ Lifecycle.beginRequest(getServletContext(), session, request);
+ Manager.instance().restoreConversation( request.getParameterMap() );
+ Lifecycle.resumeConversation(session);
+ Manager.instance().handleConversationPropagation( request.getParameterMap() );
+ identity.authenticate();
+ }
+ catch (Exception ex)
+ {
+ Lifecycle.endRequest();
+ throw ex;
+ }
+ finally
+ {
+ Lifecycle.setServletRequest(null);
+ Lifecycle.setPhaseId(null);
+ }
+ }
+
private String[] split(String toSplit, String delimiter)
{
if (delimiter.length() != 1) {
More information about the jboss-cvs-commits
mailing list