[java-identity-provider] branch main updated: IDP-1652 - Support easier integration into configuration by plugins
Scott Cantor
cantor.2 at osu.edu
Mon Sep 21 23:29:47 UTC 2020
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=d8c58fee9801c59935c08b4ef8c78624a547ff29
The following commit(s) were added to refs/heads/main by this push:
new d8c58fee9 IDP-1652 - Support easier integration into configuration by plugins
d8c58fee9 is described below
commit d8c58fee9801c59935c08b4ef8c78624a547ff29
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Sep 21 19:29:44 2020 -0400
IDP-1652 - Support easier integration into configuration by plugins
https://issues.shibboleth.net/jira/browse/IDP-1652
Replace manual SPSession protocol map with deprecated subtype.
---
.../idp/cas/session/impl/CASSPSession.java | 14 +++++++--
.../shibboleth/idp/conf/session-manager-system.xml | 18 ------------
.../shibboleth/idp/flows/logout/logout-beans.xml | 3 +-
.../flows/saml/saml2/slo-front-abstract-beans.xml | 3 +-
.../idp/saml/session/SAML1SPSession.java | 12 +++++++-
.../idp/saml/session/SAML2SPSession.java | 10 ++++++-
.../net/shibboleth/idp/session/SPSessionEx.java | 32 +++++++++------------
.../PopulateMultiRPContextFromLogoutContext.java | 33 ++--------------------
8 files changed, 51 insertions(+), 74 deletions(-)
diff --git a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/session/impl/CASSPSession.java b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/session/impl/CASSPSession.java
index ba08f736a..4ef038554 100644
--- a/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/session/impl/CASSPSession.java
+++ b/idp-cas-impl/src/main/java/net/shibboleth/idp/cas/session/impl/CASSPSession.java
@@ -20,8 +20,11 @@ package net.shibboleth.idp.cas.session.impl;
import java.time.Instant;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import net.shibboleth.idp.cas.config.AbstractProtocolConfiguration;
import net.shibboleth.idp.session.BasicSPSession;
+import net.shibboleth.idp.session.SPSessionEx;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -31,7 +34,8 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
*
* @author Marvin S. Addison
*/
-public class CASSPSession extends BasicSPSession {
+ at SuppressWarnings("removal")
+public class CASSPSession extends BasicSPSession implements SPSessionEx {
/** Validated ticket that started the SP session. */
@Nonnull @NotEmpty private final String ticket;
@@ -67,8 +71,14 @@ public class CASSPSession extends BasicSPSession {
return ticket;
}
+ /** {@inheritDoc} */
+ @Nullable @NotEmpty public String getProtocol() {
+ return AbstractProtocolConfiguration.PROTOCOL_URI;
+ }
+
@Override
public String toString() {
return "CASSPSession: " + getId() + " via " + ticket;
}
-}
+
+}
\ No newline at end of file
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
index e6c23d84d..f3857a1a3 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/session-manager-system.xml
@@ -53,24 +53,6 @@
<bean id="shibboleth.DefaultSPSessionSerializerRegistry" class="net.shibboleth.idp.session.SPSessionSerializerRegistry" />
-
- <bean id="shibboleth.DefaultSessionTypeProtocolMap"
- class="org.springframework.beans.factory.config.MapFactoryBean">
- <property name="sourceMap">
- <map>
- <entry key="#{T(net.shibboleth.idp.saml.session.SAML1SPSession)}">
- <util:constant static-field="org.opensaml.saml.common.xml.SAMLConstants.SAML11P_NS" />
- </entry>
- <entry key="#{T(net.shibboleth.idp.saml.session.SAML2SPSession)}">
- <util:constant static-field="org.opensaml.saml.common.xml.SAMLConstants.SAML20P_NS" />
- </entry>
- <entry key="#{T(net.shibboleth.idp.cas.session.impl.CASSPSession)}">
- <util:constant static-field="net.shibboleth.idp.cas.config.AbstractProtocolConfiguration.PROTOCOL_URI" />
- </entry>
- </map>
- </property>
- </bean>
-
<bean id="shibboleth.SessionManager" class="net.shibboleth.idp.session.impl.StorageBackedSessionManager"
depends-on="shibboleth.OpenSAMLConfig"
p:httpServletRequest-ref="shibboleth.HttpServletRequest"
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-beans.xml
index 77da80755..bb63e2707 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-beans.xml
@@ -62,8 +62,7 @@
<bean id="PopulateMultiRPContextFromLogoutContext"
class="net.shibboleth.idp.session.impl.PopulateMultiRPContextFromLogoutContext" scope="prototype"
p:activationCondition="%{idp.logout.elaboration:false}"
- p:roleDescriptorResolver-ref="shibboleth.RoleDescriptorResolver"
- p:sessionTypeProtocolMap="#{getObject('shibboleth.SessionTypeProtocolMap') ?: getObject('shibboleth.DefaultSessionTypeProtocolMap')}" />
+ p:roleDescriptorResolver-ref="shibboleth.RoleDescriptorResolver" />
<bean id="SetRPUIInformation"
class="net.shibboleth.idp.ui.impl.SetRPUIInformation" scope="prototype"
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/slo-front-abstract-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/slo-front-abstract-beans.xml
index d0438e85a..5909d9823 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/slo-front-abstract-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/slo-front-abstract-beans.xml
@@ -69,8 +69,7 @@
<bean id="PopulateMultiRPContextFromLogoutContext"
class="net.shibboleth.idp.session.impl.PopulateMultiRPContextFromLogoutContext" scope="prototype"
p:activationCondition="%{idp.logout.elaboration:false}"
- p:roleDescriptorResolver-ref="shibboleth.RoleDescriptorResolver"
- p:sessionTypeProtocolMap="#{getObject('shibboleth.SessionTypeProtocolMap') ?: getObject('shibboleth.DefaultSessionTypeProtocolMap')}" />
+ p:roleDescriptorResolver-ref="shibboleth.RoleDescriptorResolver" />
<bean id="SetRPUIInformation"
class="net.shibboleth.idp.ui.impl.SetRPUIInformation" scope="prototype"
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java
index 379356c96..8df32672d 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java
@@ -20,15 +20,20 @@ package net.shibboleth.idp.saml.session;
import java.time.Instant;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import org.opensaml.saml.common.xml.SAMLConstants;
import net.shibboleth.idp.session.BasicSPSession;
+import net.shibboleth.idp.session.SPSessionEx;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
/**
* Marker subtype for a SAML 1 session, adds no actual information other than its identity as
* a SAML 1 session.
*/
-public class SAML1SPSession extends BasicSPSession {
+ at SuppressWarnings("removal")
+public class SAML1SPSession extends BasicSPSession implements SPSessionEx {
/**
* Constructor.
@@ -42,4 +47,9 @@ public class SAML1SPSession extends BasicSPSession {
super(id, creation, expiration);
}
+ /** {@inheritDoc} */
+ @Nullable @NotEmpty public String getProtocol() {
+ return SAMLConstants.SAML11P_NS;
+ }
+
}
\ No newline at end of file
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML2SPSession.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML2SPSession.java
index 13b27221d..c6834c268 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML2SPSession.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML2SPSession.java
@@ -25,12 +25,14 @@ import javax.annotation.Nullable;
import org.opensaml.core.xml.io.MarshallingException;
import org.opensaml.core.xml.util.XMLObjectSupport;
+import org.opensaml.saml.common.xml.SAMLConstants;
import org.opensaml.saml.saml2.core.NameID;
import org.opensaml.saml.saml2.profile.SAML2ObjectSupport;
import com.google.common.base.MoreObjects;
import net.shibboleth.idp.session.BasicSPSession;
+import net.shibboleth.idp.session.SPSessionEx;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.logic.Constraint;
import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -40,7 +42,8 @@ import net.shibboleth.utilities.java.support.xml.SerializeSupport;
* Extends a {@link BasicSPSession} with SAML 2.0 information required for
* reverse lookup in the case of a logout.
*/
-public class SAML2SPSession extends BasicSPSession {
+ at SuppressWarnings("removal")
+public class SAML2SPSession extends BasicSPSession implements SPSessionEx {
/** The NameID asserted to the SP. */
@Nonnull private final NameID nameID;
@@ -93,6 +96,11 @@ public class SAML2SPSession extends BasicSPSession {
return nameID.getValue();
}
+ /** {@inheritDoc} */
+ @Nullable @NotEmpty public String getProtocol() {
+ return SAMLConstants.SAML20P_NS;
+ }
+
/** {@inheritDoc} */
@Override
public int hashCode() {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java b/idp-session-api/src/main/java/net/shibboleth/idp/session/SPSessionEx.java
similarity index 57%
copy from idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java
copy to idp-session-api/src/main/java/net/shibboleth/idp/session/SPSessionEx.java
index 379356c96..31dd3ef88 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/session/SAML1SPSession.java
+++ b/idp-session-api/src/main/java/net/shibboleth/idp/session/SPSessionEx.java
@@ -15,31 +15,27 @@
* limitations under the License.
*/
-package net.shibboleth.idp.saml.session;
+package net.shibboleth.idp.session;
-import java.time.Instant;
+import javax.annotation.Nullable;
-import javax.annotation.Nonnull;
-
-import net.shibboleth.idp.session.BasicSPSession;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
/**
- * Marker subtype for a SAML 1 session, adds no actual information other than its identity as
- * a SAML 1 session.
+ * Temporary extension of {@link SPSession} to add protocol access.
+ *
+ * TODO: remove in V5
+ *
+ * @since 4.1.0
+ * @deprecated
*/
-public class SAML1SPSession extends BasicSPSession {
-
+ at Deprecated(since="4.1.0", forRemoval=true)
+public interface SPSessionEx extends SPSession {
+
/**
- * Constructor.
+ * Get a prototocol constant for the session suitable for metadata lookup.
*
- * @param id the identifier of the service associated with this session
- * @param creation creation time of session
- * @param expiration expiration time of session
+ * @return a protocol constant
*/
- public SAML1SPSession(@Nonnull @NotEmpty final String id, @Nonnull final Instant creation,
- @Nonnull final Instant expiration) {
- super(id, creation, expiration);
- }
-
+ @Nullable @NotEmpty String getProtocol();
}
\ No newline at end of file
diff --git a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/PopulateMultiRPContextFromLogoutContext.java b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/PopulateMultiRPContextFromLogoutContext.java
index c458bb610..da6421528 100644
--- a/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/PopulateMultiRPContextFromLogoutContext.java
+++ b/idp-session-impl/src/main/java/net/shibboleth/idp/session/impl/PopulateMultiRPContextFromLogoutContext.java
@@ -17,9 +17,6 @@
package net.shibboleth.idp.session.impl;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
import java.util.function.Function;
import javax.annotation.Nonnull;
@@ -30,13 +27,13 @@ import net.shibboleth.idp.profile.AbstractProfileAction;
import net.shibboleth.idp.profile.context.MultiRelyingPartyContext;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
import net.shibboleth.idp.session.SPSession;
+import net.shibboleth.idp.session.SPSessionEx;
import net.shibboleth.idp.session.context.LogoutContext;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.component.ComponentSupport;
import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
@@ -64,6 +61,7 @@ import org.slf4j.LoggerFactory;
* @post If (ProfileRequestContext.getSubcontext(LogoutContext.class) != null,
* then ProfileRequestContext.getSubcontext(MultiRelyingPartyContext.class) != null
*/
+ at SuppressWarnings("removal")
public class PopulateMultiRPContextFromLogoutContext extends AbstractProfileAction {
/** Label for {@link MultiRelyingPartyContext} entries. */
@@ -78,9 +76,6 @@ public class PopulateMultiRPContextFromLogoutContext extends AbstractProfileActi
/** Lookup function for {@link LogoutContext}. */
@Nonnull private Function<ProfileRequestContext,LogoutContext> logoutContextLookupStrategy;
- /** Map of {@link SPSession} subtypes to SAML metadata protocol constants. */
- @Nonnull private Map<Class<? extends SPSession>,String> sessionTypeProtocolMap;
-
/** Role to resolve metadata for. */
@NonnullAfterInit private QName role;
@@ -90,7 +85,6 @@ public class PopulateMultiRPContextFromLogoutContext extends AbstractProfileActi
/** Constructor. */
public PopulateMultiRPContextFromLogoutContext() {
logoutContextLookupStrategy = new ChildContextLookup<>(LogoutContext.class);
- sessionTypeProtocolMap = Collections.emptyMap();
role = SPSSODescriptor.DEFAULT_ELEMENT_NAME;
}
@@ -116,27 +110,6 @@ public class PopulateMultiRPContextFromLogoutContext extends AbstractProfileActi
logoutContextLookupStrategy = Constraint.isNotNull(strategy, "LogoutContext lookup strategy cannot be null");
}
- /**
- * Set the map of {@link SPSession} subtypes to SAML metadata protocol constants.
- *
- * @param map map to set
- */
- public void setSessionTypeProtocolMap(@Nonnull final Map<Class<? extends SPSession>,String> map) {
- ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
- Constraint.isNotNull(map, "Session type to protocol map cannot be null");
-
- sessionTypeProtocolMap = new HashMap<>(map.size());
-
- for (final Map.Entry<Class<? extends SPSession>,String> entry : map.entrySet()) {
- if (entry.getKey() != null) {
- final String trimmed = StringSupport.trimOrNull(entry.getValue());
- if (trimmed != null) {
- sessionTypeProtocolMap.put(entry.getKey(), entry.getValue());
- }
- }
- }
- }
-
/**
* Set the metadata role to lookup.
*
@@ -193,7 +166,7 @@ public class PopulateMultiRPContextFromLogoutContext extends AbstractProfileActi
ProtocolCriterion protocolCriterion = null;
final SPSession spSession = logoutCtx.getSessions(relyingPartyId).iterator().next();
- final String protocol = sessionTypeProtocolMap.get(spSession.getClass());
+ final String protocol = spSession instanceof SPSessionEx ? ((SPSessionEx) spSession).getProtocol() : null;
if (protocol != null) {
protocolCriterion = new ProtocolCriterion(protocol);
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list