[java-identity-provider COMMIT] in /trunk/idp-session-impl/src: main/java/net/shibboleth/idp/session/impl/PopulateSes...

noreply at shibboleth.net noreply at shibboleth.net
Fri Oct 11 16:50:35 EDT 2013


Author: scantor
Date: Fri Oct 11 16:50:35 2013
New Revision: 4844

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=4844&view=rev
Log:
Add cookie-based lookup, implement profile action to populate Session Ctx

Added:
    trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/PopulateSessionContext.java   (with props)
    trunk/idp-session-impl/src/test/java/net/shibboleth/idp/session/impl/PopulateSessionContextTest.java   (with props)
Modified:
    trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java

Modified: trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java?rev=4844&r1=4843&r2=4844&view=diff
==============================================================================
--- trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java (original)
+++ trunk/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/StorageBackedSessionManager.java Fri Oct 11 16:50:35 2013
@@ -18,12 +18,14 @@
 package net.shibboleth.idp.session.impl;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -46,6 +48,7 @@
 import net.shibboleth.idp.session.SessionException;
 import net.shibboleth.idp.session.SessionManager;
 import net.shibboleth.idp.session.SessionResolver;
+import net.shibboleth.idp.session.criterion.HttpServletRequestCriterion;
 import net.shibboleth.idp.session.criterion.SPSessionCriterion;
 import net.shibboleth.idp.session.criterion.SessionIdCriterion;
 import net.shibboleth.utilities.java.support.annotation.Duration;
@@ -536,6 +539,26 @@
         // a secondary index is being maintained.
         
         if (criteria != null) {
+            HttpServletRequestCriterion requestCriterion = criteria.get(HttpServletRequestCriterion.class);
+            if (requestCriterion != null) {
+                if (httpRequest != null) {
+                    Cookie[] cookies = httpRequest.getCookies();
+                    if (cookies != null) {
+                        for (Cookie cookie : cookies) {
+                            if (cookieName.equals(cookie.getName())) {
+                                IdPSession session = lookupByCookie(cookie);
+                                if (session != null) {
+                                    return ImmutableList.of(session);
+                                }
+                            }
+                        }
+                    }
+                    return ImmutableList.of();
+                } else {
+                    throw new ResolverException("HttpServletRequest is null");
+                }
+            }
+            
             SessionIdCriterion sessionIdCriterion = criteria.get(SessionIdCriterion.class);
             if (sessionIdCriterion != null) {
                 IdPSession session = lookupBySessionId(sessionIdCriterion.getSessionId());
@@ -642,6 +665,21 @@
             }
         }
     }
+    
+    /**
+     * Performs a lookup and deserializes a record based on the session identified by a cookie.
+     * 
+     * @param cookie the cookie to recover the session or session ID from
+     * @return  the IdPSession object, or null
+     * @throws ResolverException if an error occurs during lookup
+     */
+    @Nullable private IdPSession lookupByCookie(@Nonnull final Cookie cookie) throws ResolverException {
+        log.debug("Performing primary lookup on session identified by cookie");
+        
+        // TODO: handle client-side storage case
+        
+        return lookupBySessionId(cookie.getValue());
+    }
 
     /**
      * Performs a lookup and deserializes a record based on session ID.



More information about the commits mailing list