[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