[java-identity-provider] branch main updated: JSPROF-1 - Move RelyingParty "layer" into java-shib-profile

Scott Cantor cantor.2 at osu.edu
Wed Feb 15 16:08:03 UTC 2023


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=9e08da9b9b6327b588720d4ba71ed28d582b0b5c

The following commit(s) were added to refs/heads/main by this push:
     new 9e08da9b9 JSPROF-1 - Move RelyingParty "layer" into java-shib-profile
9e08da9b9 is described below

commit 9e08da9b9b6327b588720d4ba71ed28d582b0b5c
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Feb 15 11:07:59 2023 -0500

    JSPROF-1 - Move RelyingParty "layer" into java-shib-profile
    
    https://shibboleth.atlassian.net/browse/JSPROF-1
    
    Move predicates out.
    Stubs left for commonly used condition classes in configurations.
---
 .../navigate/ForceAuthnProfileConfigPredicate.java |   2 +-
 .../net/shibboleth/idp/conf/conditions.xml         |   2 +-
 .../net/shibboleth/idp/conf/global-system.xml      | 167 ++++++++++---------
 .../net/shibboleth/idp/conf/services-system.xml    |   2 +-
 .../idp/flows/saml/saml1/sso-abstract-beans.xml    |   2 +-
 .../idp/flows/saml/saml2/sso-abstract-beans.xml    |   2 +-
 idp-profile-api/pom.xml                            |  71 --------
 .../config/logic/DetailedErrorsPredicate.java      |   4 +-
 .../config/logic/ResolveAttributesPredicate.java   |  51 ------
 .../navigate}/SpringFlowScopeLookupFunction.java   |   2 +-
 .../idp/profile/function/package-info.java         |  22 ---
 .../profile/logic/AbstractAttributePredicate.java  | 139 ----------------
 .../logic/AbstractRelyingPartyPredicate.java       |  67 --------
 .../idp/profile/logic/DateAttributePredicate.java  | 131 ++-------------
 .../profile/logic/DynamicAttributePredicate.java   | 180 ++-------------------
 .../idp/profile/logic/LoopDetectionPredicate.java  | 117 ++------------
 .../idp/profile/logic/RegexAttributePredicate.java | 112 ++-----------
 .../idp/profile/logic/ScriptedPredicate.java       |  26 ++-
 .../profile/logic/SimpleAttributePredicate.java    | 151 +----------------
 .../profile/logic/SpringExpressionPredicate.java   |  24 +--
 .../profile/logic/VerifiedProfilePredicate.java    |  43 -----
 .../messaging/AbstractRelyingPartyPredicate.java   |  75 ---------
 .../idp/profile/logic/messaging/package-info.java  |  22 ---
 .../shibboleth/idp/profile/logic/package-info.java |   2 +-
 .../profile/logic/DateAttributePredicateTest.java  | 158 ------------------
 .../logic/DynamicAttributePredicateTest.java       | 100 ------------
 .../profile/logic/LoopDetectionPredicateTest.java  |  82 ----------
 .../idp/profile/logic/ScriptedPredicateTest.java   | 107 ------------
 .../logic/SimpleAttributePredicateTest.java        | 117 --------------
 .../shibboleth/idp/profile/logic/inlineBean.xml    |  24 ---
 .../shibboleth/idp/profile/logic/resourceBean.xml  |  14 --
 .../net/shibboleth/idp/profile/logic/script.js     |   5 -
 .../logic/IncludeAttributeStatementPredicate.java  |   4 +-
 .../logic/NotBeforeProfileConfigPredicate.java     |   4 +-
 .../config/logic/SignAssertionsPredicate.java      |   4 +-
 .../config/logic/SignRequestsPredicate.java        |   4 +-
 .../config/logic/SignResponsesPredicate.java       |   4 +-
 .../ClientTLSArtifactRequestsPredicate.java        |   4 +-
 .../ClientTLSSOAPLogoutRequestsPredicate.java      |   4 +-
 .../messaging/SignArtifactRequestsPredicate.java   |   4 +-
 .../messaging/SignSOAPLogoutRequestsPredicate.java |   4 +-
 .../config/logic/CheckAddressPredicate.java        |   4 +-
 .../logic/IgnoreRequestSignaturesPredicate.java    |   4 +-
 .../logic/IgnoreScopingProfileConfigPredicate.java |   4 +-
 .../profile/config/logic/SOAPErrorPredicate.java   |   4 +-
 .../SuppressAuthenticatingAuthorityPredicate.java  |   4 +-
 .../impl/RelyingPartyConfigurationSupport.java     |   2 +-
 47 files changed, 193 insertions(+), 1888 deletions(-)

diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/config/navigate/ForceAuthnProfileConfigPredicate.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/config/navigate/ForceAuthnProfileConfigPredicate.java
index 93be7dd09..d656997eb 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/config/navigate/ForceAuthnProfileConfigPredicate.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/config/navigate/ForceAuthnProfileConfigPredicate.java
@@ -20,9 +20,9 @@ package net.shibboleth.idp.authn.config.navigate;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.authn.config.AuthenticationProfileConfiguration;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/conditions.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/conditions.xml
index 6fdb45296..2fb9ea78e 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/conditions.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/conditions.xml
@@ -34,7 +34,7 @@
     <bean id="shibboleth.Conditions.BrowserProfile"
         class="org.opensaml.profile.logic.BrowserProfilePredicate" />
     <bean id="shibboleth.Conditions.RelyingPartyId"
-        class="net.shibboleth.profile.logic.RelyingPartyIdPredicate" abstract="true" />
+        class="net.shibboleth.profile.context.logic.RelyingPartyIdPredicate" abstract="true" />
         
     <bean id="shibboleth.Conditions.Scripted"
         class="net.shibboleth.idp.profile.logic.ScriptedPredicate" abstract="true" />
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/global-system.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/global-system.xml
index 070947345..943dd85e5 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/global-system.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/global-system.xml
@@ -39,90 +39,89 @@
 
     <!-- This BeanFactoryPostProcessor rewrites class and parent references to relocated classes or beans. -->
     <bean id="shibboleth.RelocatedBeanFactoryPostProcessor"
-            class="net.shibboleth.shared.spring.config.RelocatedBeanFactoryPostProcessor">
-        <property name="classes">
-            <map>
-                <!-- At present all of these are being added for V5 and would be removable for V6. -->
-                
-                <entry key="net.shibboleth.utilities.java.support.codec.StringDigester"
-                    value="net.shibboleth.shared.codec.StringDigester" />
-                
-                <entry key="net.shibboleth.utilities.java.support.logic.FunctionSupport"
-                    value="net.shibboleth.shared.logic.FunctionSupport" />
-                <entry key="net.shibboleth.utilities.java.support.logic.PredicateSupport"
-                    value="net.shibboleth.shared.logic.PredicateSupport" />
-                <entry key="net.shibboleth.utilities.java.support.logic.RegexPredicate"
-                    value="net.shibboleth.shared.logic.RegexPredicate" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiConsumer"
-                    value="net.shibboleth.shared.logic.ScriptedBiConsumer" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiFunction"
-                    value="net.shibboleth.shared.logic.ScriptedBiFunction" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiPredicate"
-                    value="net.shibboleth.shared.logic.ScriptedBiPredicate" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedConsumer"
-                    value="net.shibboleth.shared.logic.ScriptedConsumer" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedFunction"
-                    value="net.shibboleth.shared.logic.ScriptedFunction" />
-                <entry key="net.shibboleth.utilities.java.support.logic.ScriptedPredicate"
-                    value="net.shibboleth.shared.logic.ScriptedPredicate" />
-                <entry key="net.shibboleth.utilities.java.support.logic.StrategyIndirectedPredicate"
-                    value="net.shibboleth.shared.logic.StrategyIndirectedPredicate" />
-                
-                <entry key="net.shibboleth.utilities.java.support.net.DynamicResponseHeaderFilter"
-                    value="net.shibboleth.shared.net.impl.DynamicResponseHeaderFilter" />
-                <entry key="net.shibboleth.utilities.java.support.net.SameSiteCookieHeaderFilter"
-                    value="net.shibboleth.shared.net.impl.SameSiteCookieHeaderFilter" />
-                
-                <entry key="net.shibboleth.utilities.java.support.velocity.Template"
-                    value="net.shibboleth.shared.velocity.Template" />
-                
-                <entry key="net.shibboleth.ext.spring.factory.KeyStoreFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.KeyStoreFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.PKCS11PrivateKeyFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.PKCS11PrivateKeyFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.PrivateKeyFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.PrivateKeyFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.PublicKeyFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.PublicKeyFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.X509CertificateFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.X509CertificateFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.X509CertificateChainFactoryBean"
-                    value="net.shibboleth.shared.spring.security.factory.X509CertificateChainFactoryBean" />
-                    
-                <entry key="net.shibboleth.ext.spring.resource.HTTPResource"
-                    value="net.shibboleth.shared.spring.httpclient.resource.HTTPResource" />
-                <entry key="net.shibboleth.ext.spring.resource.FileBackedHTTPResource"
-                    value="net.shibboleth.shared.spring.httpclient.resource.FileBackedHTTPResource" />
-                    
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiConsumer"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionBiConsumer" />
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiFunction"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionBiFunction" />
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiPredicate"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionBiPredicate" />
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionConsumer"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionConsumer" />
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionFunction"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionFunction" />
-                <entry key="net.shibboleth.ext.spring.util.SpringExpressionPredicate"
-                    value="net.shibboleth.shared.spring.expression.SpringExpressionPredicate" />
-                    
-                <entry key="net.shibboleth.ext.spring.factory.CombiningListFactoryBean"
-                    value="net.shibboleth.shared.spring.factory.CombiningListFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.DOMDocumentFactoryBean"
-                    value="net.shibboleth.shared.spring.factory.DOMDocumentFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.EvaluableScriptFactoryBean"
-                    value="net.shibboleth.shared.spring.factory.EvaluableScriptFactoryBean" />
-                <entry key="net.shibboleth.ext.spring.factory.PatternFactoryBean"
-                    value="net.shibboleth.shared.spring.factory.PatternFactoryBean" />
-
-                <entry key="net.shibboleth.ext.spring.resource.ConditionalResource"
-                    value="net.shibboleth.shared.spring.resource.ConditionalResource" />
-                <entry key="net.shibboleth.ext.spring.resource.RunnableFileSystemResource"
-                    value="net.shibboleth.shared.spring.resource.RunnableFileSystemResource" />
-            </map>
-        </property>
-    </bean>
+        class="net.shibboleth.shared.spring.config.RelocatedBeanFactoryPostProcessor"
+        p:classes-ref="shibboleth.RelocatedClassMap"/>
+
+    <util:map id="shibboleth.RelocatedClassMap">
+        <!-- At present all of these are being added for V5 and would be removable for V6. -->
+        
+        <entry key="net.shibboleth.utilities.java.support.codec.StringDigester"
+            value="net.shibboleth.shared.codec.StringDigester" />
+        
+        <entry key="net.shibboleth.utilities.java.support.logic.FunctionSupport"
+            value="net.shibboleth.shared.logic.FunctionSupport" />
+        <entry key="net.shibboleth.utilities.java.support.logic.PredicateSupport"
+            value="net.shibboleth.shared.logic.PredicateSupport" />
+        <entry key="net.shibboleth.utilities.java.support.logic.RegexPredicate"
+            value="net.shibboleth.shared.logic.RegexPredicate" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiConsumer"
+            value="net.shibboleth.shared.logic.ScriptedBiConsumer" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiFunction"
+            value="net.shibboleth.shared.logic.ScriptedBiFunction" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedBiPredicate"
+            value="net.shibboleth.shared.logic.ScriptedBiPredicate" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedConsumer"
+            value="net.shibboleth.shared.logic.ScriptedConsumer" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedFunction"
+            value="net.shibboleth.shared.logic.ScriptedFunction" />
+        <entry key="net.shibboleth.utilities.java.support.logic.ScriptedPredicate"
+            value="net.shibboleth.shared.logic.ScriptedPredicate" />
+        <entry key="net.shibboleth.utilities.java.support.logic.StrategyIndirectedPredicate"
+            value="net.shibboleth.shared.logic.StrategyIndirectedPredicate" />
+        
+        <entry key="net.shibboleth.utilities.java.support.net.DynamicResponseHeaderFilter"
+            value="net.shibboleth.shared.net.impl.DynamicResponseHeaderFilter" />
+        <entry key="net.shibboleth.utilities.java.support.net.SameSiteCookieHeaderFilter"
+            value="net.shibboleth.shared.net.impl.SameSiteCookieHeaderFilter" />
+        
+        <entry key="net.shibboleth.utilities.java.support.velocity.Template"
+            value="net.shibboleth.shared.velocity.Template" />
+        
+        <entry key="net.shibboleth.ext.spring.factory.KeyStoreFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.KeyStoreFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.PKCS11PrivateKeyFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.PKCS11PrivateKeyFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.PrivateKeyFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.PrivateKeyFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.PublicKeyFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.PublicKeyFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.X509CertificateFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.X509CertificateFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.X509CertificateChainFactoryBean"
+            value="net.shibboleth.shared.spring.security.factory.X509CertificateChainFactoryBean" />
+            
+        <entry key="net.shibboleth.ext.spring.resource.HTTPResource"
+            value="net.shibboleth.shared.spring.httpclient.resource.HTTPResource" />
+        <entry key="net.shibboleth.ext.spring.resource.FileBackedHTTPResource"
+            value="net.shibboleth.shared.spring.httpclient.resource.FileBackedHTTPResource" />
+            
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiConsumer"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionBiConsumer" />
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiFunction"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionBiFunction" />
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionBiPredicate"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionBiPredicate" />
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionConsumer"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionConsumer" />
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionFunction"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionFunction" />
+        <entry key="net.shibboleth.ext.spring.util.SpringExpressionPredicate"
+            value="net.shibboleth.shared.spring.expression.SpringExpressionPredicate" />
+            
+        <entry key="net.shibboleth.ext.spring.factory.CombiningListFactoryBean"
+            value="net.shibboleth.shared.spring.factory.CombiningListFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.DOMDocumentFactoryBean"
+            value="net.shibboleth.shared.spring.factory.DOMDocumentFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.EvaluableScriptFactoryBean"
+            value="net.shibboleth.shared.spring.factory.EvaluableScriptFactoryBean" />
+        <entry key="net.shibboleth.ext.spring.factory.PatternFactoryBean"
+            value="net.shibboleth.shared.spring.factory.PatternFactoryBean" />
+
+        <entry key="net.shibboleth.ext.spring.resource.ConditionalResource"
+            value="net.shibboleth.shared.spring.resource.ConditionalResource" />
+        <entry key="net.shibboleth.ext.spring.resource.RunnableFileSystemResource"
+            value="net.shibboleth.shared.spring.resource.RunnableFileSystemResource" />
+    </util:map>
 
     <!-- This extends the original user-space resource list with the classpath-embedded message tree. -->
     <bean id ="ExtendedMessageSourceResources" parent="shibboleth.ListCombiner"
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/services-system.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/services-system.xml
index 2d8ba96be..4ffb8c1e2 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/services-system.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/conf/services-system.xml
@@ -91,7 +91,7 @@
 	    <constructor-arg name="strategy">
             <bean class="net.shibboleth.idp.attribute.transcoding.impl.AttributeRegistryServiceStrategy">
                 <property name="extendedConditionFactory">
-                    <bean class="net.shibboleth.profile.logic.impl.RelyingPartiesActivationConditionFactory" />
+                    <bean class="net.shibboleth.profile.context.logic.impl.RelyingPartiesActivationConditionFactory" />
                 </property>
             </bean>
 	    </constructor-arg>
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml1/sso-abstract-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml1/sso-abstract-beans.xml
index 7c35ebacf..d069fe460 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml1/sso-abstract-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml1/sso-abstract-beans.xml
@@ -31,7 +31,7 @@
         class="org.opensaml.profile.action.impl.StaticMessageChannelSecurity" scope="prototype"
         p:confidentialityActive="false" p:integrityActive="false" />
 
-    <bean id="ResolveAttributesPredicate" class="net.shibboleth.idp.profile.config.logic.ResolveAttributesPredicate" />
+    <bean id="ResolveAttributesPredicate" class="net.shibboleth.profile.config.logic.ResolveAttributesPredicate" />
 
     <bean id="AddNameIdentifierToSubjects"
             class="org.opensaml.saml.saml1.profile.impl.AddNameIdentifierToSubjects" scope="prototype">
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/sso-abstract-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/sso-abstract-beans.xml
index 1c9588674..bc0c94716 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/sso-abstract-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/saml/saml2/sso-abstract-beans.xml
@@ -59,7 +59,7 @@
         </constructor-arg>
     </bean>
         
-    <bean id="ResolveAttributesPredicate" class="net.shibboleth.idp.profile.config.logic.ResolveAttributesPredicate" />
+    <bean id="ResolveAttributesPredicate" class="net.shibboleth.profile.config.logic.ResolveAttributesPredicate" />
     
     <bean id="AddNameIDToSubjects"
             class="org.opensaml.saml.saml2.profile.impl.AddNameIDToSubjects" scope="prototype">
diff --git a/idp-profile-api/pom.xml b/idp-profile-api/pom.xml
index 18cc02fae..4a766f62a 100644
--- a/idp-profile-api/pom.xml
+++ b/idp-profile-api/pom.xml
@@ -26,59 +26,25 @@
             <groupId>net.shibboleth</groupId>
             <artifactId>shib-profile-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>net.shibboleth</groupId>
-            <artifactId>shib-attribute-api</artifactId>
-        </dependency>
 
-        <dependency>
-            <groupId>${opensaml.groupId}</groupId>
-            <artifactId>opensaml-core-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-profile-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>${opensaml.groupId}</groupId>
-            <artifactId>opensaml-security-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-storage-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>${opensaml.groupId}</groupId>
-            <artifactId>opensaml-xmlsec-api</artifactId>
-        </dependency>
         <dependency>
             <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-messaging-api</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>${shib-shared.groupId}</groupId>
-            <artifactId>shib-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${shib-shared.groupId}</groupId>
-            <artifactId>shib-service</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${shib-shared.groupId}</groupId>
-            <artifactId>shib-spring</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>io.dropwizard.metrics</groupId>
-            <artifactId>metrics-core</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>${spring.groupId}</groupId>
             <artifactId>spring-beans</artifactId>
@@ -91,10 +57,6 @@
             <groupId>${spring.groupId}</groupId>
             <artifactId>spring-core</artifactId>
         </dependency>
-        <dependency>
-            <groupId>${spring.groupId}</groupId>
-            <artifactId>spring-expression</artifactId>
-        </dependency>
         <dependency>
             <groupId>${spring-webflow.groupId}</groupId>
             <artifactId>spring-webflow</artifactId>
@@ -110,42 +72,9 @@
         <!-- Runtime Dependencies -->
 
         <!-- Test Dependencies -->
-        <!-- Needed for XMLObject providers. -->
-        <dependency>
-            <groupId>${opensaml.groupId}</groupId>
-            <artifactId>opensaml-core-impl</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>${opensaml.groupId}</groupId>
-            <artifactId>opensaml-testing</artifactId>
-            <scope>test</scope>
-        </dependency>
 
     </dependencies>
 
-    <profiles>
-        <!--
-            Pull in a Javascript engine for testing in Java
-            versions where the JDK doesn't provide one.
-        -->
-        <profile>
-            <id>get-nashorn</id>
-            <activation>
-                <jdk>[15,</jdk>
-            </activation>
-            <dependencies>
-                <dependency>
-		    <groupId>org.openjdk.nashorn</groupId>
-		    <artifactId>nashorn-core</artifactId>
-		    <version>${nashorn.jdk.version}</version>
-                    <scope>test</scope>
-                </dependency>
-            </dependencies>
-        </profile>
-    </profiles>
-
     <scm>
         <connection>${shibboleth.scm.connection}java-identity-provider</connection>
         <developerConnection>${shibboleth.scm.developerConnection}java-identity-provider</developerConnection>
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
index 3cabf0609..1dbc640c4 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
@@ -19,9 +19,9 @@ package net.shibboleth.idp.profile.config.logic;
 
 import javax.annotation.Nullable;
 
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
@@ -33,7 +33,7 @@ public class DetailedErrorsPredicate extends AbstractRelyingPartyPredicate {
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         if (input != null) {
-            final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+            final RelyingPartyContext rpc = getRelyingPartyContext(input);
             if (rpc != null) {
                 final net.shibboleth.profile.relyingparty.RelyingPartyConfiguration config = rpc.getConfiguration();
                 if (config instanceof RelyingPartyConfiguration) {
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java
deleted file mode 100644
index 8a0c400f0..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.config.logic;
-
-import javax.annotation.Nullable;
-
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
-import net.shibboleth.profile.config.AttributeResolvingProfileConfiguration;
-import net.shibboleth.profile.config.ProfileConfiguration;
-import net.shibboleth.profile.context.RelyingPartyContext;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-
-/**
- * Predicate to determine whether a profile request should resolve attributes.
- * 
- * @since 4.2.0
- */
-public class ResolveAttributesPredicate extends AbstractRelyingPartyPredicate {
-
-    /** {@inheritDoc} */
-    public boolean test(@Nullable final ProfileRequestContext input) {
-        if (input != null) {
-            final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
-            if (rpc != null) {
-                final ProfileConfiguration pc = rpc.getProfileConfig();
-                if (pc instanceof AttributeResolvingProfileConfiguration) {
-                    return ((AttributeResolvingProfileConfiguration) pc).isResolveAttributes(input);
-                }
-            }
-        }
-        
-        return false;
-    }
-
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/SpringFlowScopeLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringFlowScopeLookupFunction.java
similarity index 97%
rename from idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/SpringFlowScopeLookupFunction.java
rename to idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringFlowScopeLookupFunction.java
index 0c4f18f6a..2ca18a0e4 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/SpringFlowScopeLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringFlowScopeLookupFunction.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.profile.function;
+package net.shibboleth.idp.profile.context.navigate;
 
 import java.util.function.Function;
 
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/package-info.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/package-info.java
deleted file mode 100644
index 953b86b83..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/function/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Functional classes for profile behavior.
- */
-
-package net.shibboleth.idp.profile.function;
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractAttributePredicate.java
deleted file mode 100644
index 0791b770c..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractAttributePredicate.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import java.util.Map;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
-
-/**
- * Abstract base class for predicates operating on an {@link AttributeContext}.
- */
-public abstract class AbstractAttributePredicate implements Predicate<ProfileRequestContext> {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractAttributePredicate.class);
-
-    /** Strategy function to lookup {@link AttributeContext}. */
-    @Nonnull private Function<ProfileRequestContext,AttributeContext> attributeContextLookupStrategy;
-
-    /** Whether to look at filtered or unfiltered attributes. */
-    private boolean useUnfilteredAttributes;
-
-    /** Constructor. */
-    public AbstractAttributePredicate() {
-        attributeContextLookupStrategy =
-                new ChildContextLookup<>(AttributeContext.class).compose(
-                        new ChildContextLookup<>(RelyingPartyContext.class));
-        useUnfilteredAttributes = true;
-    }
-    
-    /**
-     * Get the lookup strategy to use to locate the {@link AttributeContext}.
-     * 
-     * @return lookup strategy to use
-     */
-    @Nonnull public Function<ProfileRequestContext,AttributeContext> getAttributeContextLookupStrategy() {
-        return attributeContextLookupStrategy;
-    }
-
-    /**
-     * Set the lookup strategy to use to locate the {@link AttributeContext}.
-     * 
-     * @param strategy lookup function to use
-     */
-    public void setAttributeContextLookupStrategy(
-            @Nonnull final Function<ProfileRequestContext,AttributeContext> strategy) {
-
-        attributeContextLookupStrategy =
-                Constraint.isNotNull(strategy, "AttributeContext lookup strategy cannot be null");
-    }
-    
-    /**
-     * Get whether to source the input attributes from the unfiltered set.
-     * 
-     * @return whether to source the input attributes from the unfiltered set
-     */
-    public boolean isUseUnfilteredAttributes() {
-        return useUnfilteredAttributes;
-    }
-    
-    /**
-     * Set whether to source the input attributes from the unfiltered set.
-     * 
-     * <p>Defaults to true.</p>
-     * 
-     * @param flag flag to set
-     */
-    public void setUseUnfilteredAttributes(final boolean flag) {
-        useUnfilteredAttributes = flag;
-    }
-    
-    /** {@inheritDoc} */
-    public boolean test(@Nullable final ProfileRequestContext input) {
-        
-        final AttributeContext attributeCtx = attributeContextLookupStrategy.apply(input);
-        if (attributeCtx == null) {
-            log.warn("No AttributeContext located for evaluation");
-            return allowNullAttributeContext();
-        }
-        
-        final Map<String,IdPAttribute> attributes = useUnfilteredAttributes
-                ? attributeCtx.getUnfilteredIdPAttributes()
-                : attributeCtx.getIdPAttributes();
-
-        if (hasMatch(attributes)) {
-            log.debug("Context satisfied requirements");
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Get the result of the predicate in the case the attribute context is null.
-     * 
-     * @return null context result
-     */
-    protected boolean allowNullAttributeContext() {
-        return false;
-    }
-    
-    /**
-     * Abstract implementation of the condition to evaluate.
-     * 
-     * @param attributeMap  the attributes to evaluate
-     * 
-     * @return the condition result
-     */
-    protected abstract boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap);
-    
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractRelyingPartyPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractRelyingPartyPredicate.java
deleted file mode 100644
index 282308aae..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/AbstractRelyingPartyPredicate.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import java.util.function.Function;
-
-import javax.annotation.Nonnull;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.logic.Constraint;
-
-import java.util.function.Predicate;
-
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.opensaml.profile.context.ProfileRequestContext;
-
-/**
- * Base class for a predicate that evaluates a {@link ProfileRequestContext} and requires access to a
- * {@link RelyingPartyContext}.
- */
-public abstract class AbstractRelyingPartyPredicate implements Predicate<ProfileRequestContext> {
-
-    /** Strategy function to lookup RelyingPartyContext. */
-    @Nonnull private Function<ProfileRequestContext,RelyingPartyContext> relyingPartyContextLookupStrategy;
-
-    /** Constructor. */
-    public AbstractRelyingPartyPredicate() {
-        relyingPartyContextLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
-    }
-    
-    /**
-     * Get the lookup strategy to use to locate the {@link RelyingPartyContext}.
-     * 
-     * @return  lookup function to use
-     */
-    @Nonnull public Function<ProfileRequestContext,RelyingPartyContext> getRelyingPartyContextLookupStrategy() {
-        return relyingPartyContextLookupStrategy;
-    }
-
-    /**
-     * Set the lookup strategy to use to locate the {@link RelyingPartyContext}.
-     * 
-     * @param strategy lookup function to use
-     */
-    public void setRelyingPartyContextLookupStrategy(
-            @Nonnull final Function<ProfileRequestContext,RelyingPartyContext> strategy) {
-
-        relyingPartyContextLookupStrategy =
-                Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
-    }
-
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
index 99d3e3cc7..7b7035edd 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
@@ -17,51 +17,22 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import java.time.DateTimeException;
-import java.time.Duration;
-import java.time.Instant;
 import java.time.format.DateTimeFormatter;
-import java.util.Map;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
-import org.slf4j.Logger;
-
-import net.shibboleth.idp.attribute.DateTimeAttributeValue;
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.shared.annotation.ParameterName;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- * Provides a date/time matching predicate that compares a date-based attribute value against
- * current system time with optional offset. By convention the predicate returns true if and only if
- * the date represented by the attribute value is after the current system time; false otherwise.
- * Thus the semantics are well-suited for cases such as evaluation of expiration dates.
- *
- * @author Marvin S. Addison
+ * Deprecated stub for relocated class.
+ * 
+ * @deprecated
  */
-public class DateAttributePredicate extends AbstractAttributePredicate {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(DateAttributePredicate.class);
-
-    /** Name of attribute to query for. */
-    @Nonnull @NotEmpty private final String attributeName;
-
-    /** Formatter used to parse string-based date attribute values. */
-    @Nullable private final DateTimeFormatter dateTimeFormatter;
-
-    /** Offset from system time used for date comparisons. */
-    @Nonnull private Duration systemTimeOffset;
-    
-    /** Result of predicate if attribute is missing or has no values. */
-    private boolean resultIfMissing;
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class DateAttributePredicate extends net.shibboleth.profile.context.logic.DateAttributePredicate {
 
     /**
      * Create a new instance that performs date comparisons against the given attribute.
@@ -69,9 +40,9 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
      * @param attribute Attribute name that provides candidate date values to test.
      */
     public DateAttributePredicate(@Nonnull @NotEmpty @ParameterName(name="attribute") final String attribute) {
-        attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
-        dateTimeFormatter = null;
-        systemTimeOffset = Duration.ZERO;
+        super(attribute);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.DateAttributePredicate.class.getName());
     }
 
     /**
@@ -83,10 +54,9 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
      */
     public DateAttributePredicate(@Nonnull @NotEmpty @ParameterName(name="attribute") final String attribute,
             @Nonnull @ParameterName(name="formatter") final DateTimeFormatter formatter) {
-        
-        attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
-        dateTimeFormatter = Constraint.isNotNull(formatter, "Formatter cannot be null");
-        systemTimeOffset = Duration.ZERO;
+        super(attribute, formatter);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.DateAttributePredicate.class.getName());
     }
 
     /**
@@ -98,78 +68,9 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
      */
     public DateAttributePredicate(@Nonnull @NotEmpty @ParameterName(name="attribute") final String attribute,
             @Nonnull @NotEmpty @ParameterName(name="formatString") final String formatString) {
-        attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
-        dateTimeFormatter = DateTimeFormatter.ofPattern(
-                Constraint.isNotNull(formatString, "Format string cannot be null"));
-        systemTimeOffset = Duration.ZERO;
-    }
-
-    /**
-     * Set the system time offset, which affects the reference date for comparisons.
-     * 
-     * <p>By default all comparisons are against system time, i.e. zero offset.</p>
-     *
-     * @param offset System time offset. A negative value decreases the target date (sooner);
-     *                         a positive value increases the target date (later).
-     */
-    public void setOffset(@Nonnull final java.time.Duration offset) {
-        systemTimeOffset = Constraint.isNotNull(offset, "Offset cannot be null");
-    }
-    
-    /**
-     * Set the result to return if the attribute to check is missing or has no values.
-     * 
-     * @param flag  flag to set
-     */
-    public void setResultIfMissing(final boolean flag) {
-        resultIfMissing = flag;
-    }
-    
-    /** {@inheritDoc} */
-    @Override
-    protected boolean allowNullAttributeContext() {
-        return resultIfMissing;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
-        
-        final IdPAttribute attribute = attributeMap.get(attributeName);
-        if (attribute == null) {
-            log.debug("Attribute {} not found in context, returning {}", attributeName, resultIfMissing);
-            return resultIfMissing;
-        } else if (attribute.getValues().isEmpty()) {
-            log.debug("Attribute {} has no values, returning {}", attributeName, resultIfMissing);
-            return resultIfMissing;
-        }
-        
-        final Instant now = Instant.now();
-        
-        String dateString;
-        for (final IdPAttributeValue value : attribute.getValues()) {
-            if (value instanceof DateTimeAttributeValue &&
-                    ((DateTimeAttributeValue) value).getValue().plus(systemTimeOffset).isAfter(now)) {
-                    return true;
-            } else if (value instanceof StringAttributeValue) {
-                if (dateTimeFormatter == null) {
-                    log.warn("No DateTimeFormatter configured, ignoring string value");
-                    continue;
-                }
-                dateString = ((StringAttributeValue) value).getValue();
-                try {
-                    assert dateTimeFormatter != null;
-                    if (Instant.from(dateTimeFormatter.parse(dateString)).plus(systemTimeOffset).isAfter(now)) {
-                        return true;
-                    }
-                } catch (final DateTimeException e) {
-                    log.warn("{} is not a valid date for the configured formatting string", dateString, e);
-                }
-            } else {
-                log.warn("Ignoring unsupported value type: {}", value.getClass().getName());
-            }
-        }
-        return false;
+        super(attribute, formatString);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.DateAttributePredicate.class.getName());
     }
     
 }
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
index abefa20dc..b9c822912 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicate.java
@@ -17,183 +17,21 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ListMultimap;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- * Predicate over an {@link AttributeContext} that derives the value(s) to match based
- * on one or more supplied Functions instead of static values.
- * 
- * <p>Each function installed must return a value that matches a value of the attribute
- * corresponding to the map key.</p>
+ * Deprecated stub for relocated class.
  * 
- * <p>Functions may return a {@link String} or a {@link Collection} containing them.</p>
- * 
- * @since 3.4.0
+ * @deprecated
  */
-public class DynamicAttributePredicate extends AbstractAttributePredicate {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(DynamicAttributePredicate.class);
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class DynamicAttributePredicate extends net.shibboleth.profile.context.logic.DynamicAttributePredicate {
 
-    /** Map of attribute IDs to functions. */
-    @Nonnull @NonnullElements private ListMultimap<String,Function<ProfileRequestContext,Object>> attributeFunctionMap;
-    
     /** Constructor. */
     public DynamicAttributePredicate() {
-        attributeFunctionMap = ArrayListMultimap.create();
-    }
-    
-    /**
-     * Set the map of attribute/function pairs (as a map of function collections) to check for.
-     * 
-     * @param map   map of attribute/function pairs
-     */
-    public void setAttributeFunctionMap(
-            @Nonnull @NonnullElements final Map<String,Collection<Function<ProfileRequestContext,Object>>> map) {
-        Constraint.isNotNull(map, "Attribute/value map cannot be null");
-        
-        attributeFunctionMap.clear();
-        for (final Map.Entry<String,Collection<Function<ProfileRequestContext,Object>>> entry : map.entrySet()) {
-            final String attributeId = StringSupport.trimOrNull(entry.getKey());
-            attributeFunctionMap.putAll(attributeId, List.copyOf(entry.getValue()));
-        }
-    }
-
-    /** {@inheritDoc} */
-    public boolean test(@Nullable final ProfileRequestContext input) {
-        
-        final AttributeContext attributeCtx = getAttributeContextLookupStrategy().apply(input);
-        if (attributeCtx == null) {
-            log.warn("No AttributeContext located for evaluation");
-            return allowNullAttributeContext();
-        }
-        
-        final Map<String,IdPAttribute> attributes = isUseUnfilteredAttributes()
-                ? attributeCtx.getUnfilteredIdPAttributes()
-                : attributeCtx.getIdPAttributes();
-
-        if (hasMatch(input, attributes)) {
-            log.debug("Context satisfied requirements");
-            return true;
-        }
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected boolean hasMatch(@Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
-        log.error("Method should never be called");
-        return false;
-    }
-
-// Checkstyle: CyclomaticComplexity OFF
-    /**
-     * Implementation of the condition to evaluate.
-     * 
-     * @param profileRequestContext current profile request context
-     * @param attributeMap  the attributes to evaluate
-     * 
-     * @return the condition result
-     */
-    protected boolean hasMatch(@Nullable final ProfileRequestContext profileRequestContext,
-            @Nonnull @NonnullElements final Map<String,IdPAttribute> attributeMap) {
-        
-        for (final String id : attributeFunctionMap.keySet()) {
-            log.debug("Checking for attribute: {}", id);
-
-            final IdPAttribute attribute = attributeMap.get(id);
-            if (attribute == null) {
-                log.debug("Attribute {} not found in context", id);
-                return false;
-            }
-
-            boolean matched = false;
-
-            for (final Function<ProfileRequestContext,Object> fn : attributeFunctionMap.get(id)) {
-                
-                final Object candidate = fn.apply(profileRequestContext);
-                
-                if (candidate instanceof String) {
-                    matched = findMatch((String) candidate, attribute);
-                } else if (candidate instanceof Collection<?>) {
-                    for (final Object subcandidate : (Collection<?>) candidate) {
-                        if (subcandidate instanceof String) {
-                            if (findMatch((String) subcandidate, attribute)) {
-                                matched = true;
-                                break;
-                            }
-                        } else {
-                            log.error(
-                                  "Collection returned by function for attribute {} contained an unsupported type: {}",
-                                    id, subcandidate.getClass().getName());
-                        }
-                    }
-                } else {
-                    log.error("Function for attribute {} returned an unsupported type: {}", id,
-                            candidate.getClass().getName());
-                }
-                
-                if (matched) {
-                    break;
-                }
-            }
-
-            if (!matched) {
-                log.debug("Attribute {} values not matched", id);
-                return false;
-            }
-        }
-        
-        return true;
-    }
-// Checkstyle: CyclomaticComplexity ON
-    
-    /**
-     * Look for a matching value in an attribute.
-     * 
-     * @param toMatch   value to look for
-     * @param attribute attribute to check
-     * 
-     * @return true iff the value is one of the attribute's values
-     */
-    protected boolean findMatch(@Nonnull @NotEmpty final String toMatch, @Nonnull final IdPAttribute attribute) {
-        
-        if ("*".equals(toMatch)) {
-            log.debug("Wildcard (*) value rule for attribute {}", attribute.getId());
-            return true;
-        }
-        for (final IdPAttributeValue value : attribute.getValues()) {
-            if (value instanceof StringAttributeValue) {
-                if (toMatch.equals(((StringAttributeValue)value).getValue())) {
-                    log.debug("Found matching value ({}) in attribute {}", toMatch, attribute.getId());
-                    return true;
-                }
-            }
-        }
-        
-        return false;
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.DynamicAttributePredicate.class.getName());
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
index 7fa4e5568..fe998b482 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
@@ -17,120 +17,21 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import java.util.Map;
-import java.util.function.Function;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.opensaml.core.metrics.MetricsSupport;
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.MetricRegistry.MetricSupplier;
-import com.codahale.metrics.SlidingTimeWindowMovingAverages;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.annotation.constraint.Positive;
-import net.shibboleth.shared.collection.CollectionSupport;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.logic.FunctionSupport;
-import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- * A condition that relies on a {@link Meter} to detect looping SPs. 
- *
- * @since 4.1.0
+ * Deprecated stub for relocated class.
+ * 
+ * @deprecated
  */
-public class LoopDetectionPredicate extends AbstractRelyingPartyPredicate {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(LoopDetectionPredicate.class);
-
-    /** Count to trigger warning. */
-    private long threshold;
-    
-    /** Map of RP names to meter names. */
-    @Nonnull @NonnullElements private Map<String,String> relyingPartyMap;
-    
-    /** Lookup strategy to obtain subject name. */
-    @Nonnull private Function<ProfileRequestContext,String> usernameLookupStrategy;
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class LoopDetectionPredicate extends net.shibboleth.profile.context.logic.LoopDetectionPredicate {
     
     /** Constructor. */
     public LoopDetectionPredicate() {
-        threshold = 20;
-        relyingPartyMap = CollectionSupport.emptyMap();
-        usernameLookupStrategy = FunctionSupport.constant(null);
-    }
-    
-    /**
-     * Set the warning threshold for the 1 minute moving average to exceed.
-     * 
-     * <p>Defaults to 20.</p>
-     * 
-     * @param value threshold to use
-     */
-    public void setThreshold(@Positive final long value) {
-        threshold = Constraint.isGreaterThan(0, value, "Threshold must be positive");
-    }
-    
-    /**
-     * Set the map of relying party names to meter names to track counts.
-     * 
-     * @param map map of RP/meter mappings
-     */
-    public void setRelyingPartyMap(@Nullable @NonnullElements final Map<String,String> map) {
-        if (map != null) {
-            relyingPartyMap = CollectionSupport.copyToMap(map);
-        } else {
-            relyingPartyMap = CollectionSupport.emptyMap();
-        }
-    }
-    
-    /**
-     * Set lookup strategy to obtain username.
-     * 
-     * @param strategy lookup strategy
-     */
-    public void setUsernameLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        usernameLookupStrategy = Constraint.isNotNull(strategy, "Username lookup strategy cannot be null");
-    }
-    
-    /** {@inheritDoc} */
-    public boolean test(@Nullable final ProfileRequestContext input) {
-        
-        final String username = usernameLookupStrategy.apply(input);
-        final RelyingPartyContext rpCtx = getRelyingPartyContextLookupStrategy().apply(input);
-        
-        if (username != null && rpCtx != null && rpCtx.getRelyingPartyId() != null) {
-            String meterName = relyingPartyMap.get(rpCtx.getRelyingPartyId());
-            if (meterName != null) {
-                meterName = MetricRegistry.name("net.shibboleth.idp.loopDetection", meterName,
-                        username.replace(".",""));
-                final MetricRegistry registry = MetricsSupport.getMetricRegistry();
-                if (registry == null) {
-                    log.error("MetricRegistry was unavailable");
-                    return false;
-                }
-                final Meter meter = registry.meter(meterName,
-                        new MetricSupplier<Meter>() {
-                            public Meter newMetric() {
-                                return new Meter(new SlidingTimeWindowMovingAverages());
-                            }
-                        });
-                meter.mark();
-                final double rate = meter.getOneMinuteRate();
-                if (rate > threshold) {
-                    log.warn("Meter {} rate of {} exceeded threshold of {}", meterName, rate, threshold);
-                    return true;
-                }
-            }
-        }
-        
-        return false;
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.LoopDetectionPredicate.class.getName());
     }
 
 }
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
index 3dcafebae..e7e20101f 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
@@ -17,111 +17,21 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.slf4j.Logger;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.primitive.StringSupport;
 /**
- * Predicate that evaluates an {@link net.shibboleth.idp.attribute.context.AttributeContext} and checks
- * a specific attribute for value(s) that match a regular expression.
+ * Deprecated stub for relocated class.
  * 
- * <p>This handles only simple string-valued data.</p>
+ * @deprecated
  */
-public class RegexAttributePredicate extends AbstractAttributePredicate {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(RegexAttributePredicate.class);
-
-    /** The attribute to evaluate. */
-    @Nullable @NotEmpty private String attributeId;
-
-    /** Regular expression. */
-    @Nullable private Pattern pattern;
-
-    /**
-     * Get the attribute ID to check.
-     * 
-     * @return the attribute ID to check
-     */
-    @Nullable @NotEmpty public String getAttributeId() {
-        return attributeId;
-    }
-
-    /**
-     * Set the attribute ID to check.
-     * 
-     * @param id the attribute ID to check
-     */
-    public void setAttributeId(@Nonnull @NotEmpty final String id) {
-        attributeId = Constraint.isNotNull(StringSupport.trimOrNull(id), "Attribute ID cannot be null or empty");
-    }
-
-    /**
-     * Get the pattern to match the attribute values against.
-     * 
-     * @return the pattern to match the attribute values against
-     */
-    @Nullable public Pattern getPattern() {
-        return pattern;
-    }
-
-    /**
-     * Set the pattern to match the attribute values against.
-     * 
-     * @param p the pattern to match the attribute values against
-     */
-    public void setPattern(@Nonnull final Pattern p) {
-        pattern = p;
-    }
-
-    /**
-     * Set the pattern to match the attribute values against.
-     * 
-     * @param s the pattern to match the attribute values against
-     */
-    public void setPattern(@Nonnull @NotEmpty final String s) {
-        pattern = Pattern.compile(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean hasMatch(@Nonnull @NonnullElements final Map<String, IdPAttribute> attributeMap) {
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class RegexAttributePredicate extends net.shibboleth.profile.context.logic.RegexAttributePredicate {
 
-        if (attributeId == null || pattern == null) {
-            log.warn("Attribute ID or regular expression were not set");
-            return false;
-        }
-        
-        final IdPAttribute attribute = attributeMap.get(attributeId);
-        if (attribute == null) {
-            log.debug("Attribute '{}' not found in context", attributeId);
-            return false;
-        }
-        
-        for (final IdPAttributeValue value : attribute.getValues()) {
-            if (value instanceof StringAttributeValue) {
-                assert pattern != null;
-                final Matcher m = pattern.matcher(((StringAttributeValue)value).getValue());
-                if (m.matches()) {
-                    log.debug("Found matching value '{}' in attribute '{}'", m.group(), attributeId);
-                    return true;
-                }
-            }
-        }
-        log.debug("Attribute '{}' values not matched", attributeId);
-        return false;
+    /** Constructor. */
+    public RegexAttributePredicate() {
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.RegexAttributePredicate.class.getName());
     }
 
-}
+}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
index 4b79e7df3..2fc525e26 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
@@ -23,22 +23,23 @@ import java.io.InputStream;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.script.ScriptContext;
 import javax.script.ScriptException;
 
-import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.core.io.Resource;
 
 import net.shibboleth.shared.annotation.ParameterName;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.shared.scripting.EvaluableScript;
 
 /**
- * A {@link java.util.function.Predicate} which calls out to a supplied script.
+ * Deprecated stub for relocated class.
+ * 
+ * @deprecated
  */
- at SuppressWarnings("removal")
-public class ScriptedPredicate
-        extends net.shibboleth.shared.logic.ScriptedPredicate<ProfileRequestContext> {
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class ScriptedPredicate extends net.shibboleth.profile.context.logic.ScriptedPredicate {
     
     /**
      * Constructor.
@@ -49,7 +50,8 @@ public class ScriptedPredicate
     public ScriptedPredicate(@Nonnull @NotEmpty @ParameterName(name="theScript") final EvaluableScript theScript,
             @Nullable @NotEmpty @ParameterName(name="extraInfo") final String extraInfo) {
         super(theScript, extraInfo);
-        setInputType(ProfileRequestContext.class);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.ScriptedPredicate.class.getName());
     }
 
     /**
@@ -59,14 +61,8 @@ public class ScriptedPredicate
      */
     public ScriptedPredicate(@Nonnull @NotEmpty @ParameterName(name="theScript") final EvaluableScript theScript) {
         super(theScript);
-        setInputType(ProfileRequestContext.class);
-    }
-    
-    /** {@inheritDoc} */
-    @Override
-    protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
-        super.prepareContext(scriptContext, input);
-        scriptContext.setAttribute("profileContext", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.ScriptedPredicate.class.getName());
     }
     
     /**
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
index 825b6051b..3cadb0fa2 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
@@ -17,156 +17,21 @@
 
 package net.shibboleth.idp.profile.logic;
 
-import java.util.Collection;
-import java.util.Map;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.slf4j.Logger;
-
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ListMultimap;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.shared.annotation.constraint.NonnullElements;
-import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- * Predicate that evaluates an {@link net.shibboleth.idp.attribute.context.AttributeContext} and checks
- * for particular attribute/value pairs.
- * 
- * <p>A map to a collection of strings is used to represent the attribute(s) and value(s) to evaluate.
- * The values are evaluated as a disjunction (OR) and the attributes are evaluated as a conjunction (AND).</p>
- * 
- * <p>This handles only simple string-valued data, or if scope is supplied, requires scoped values.</p>
+ * Deprecated stub for relocated class.
  * 
- * <p>For the special case of checking for an attribute's presence, regardless of values, the '*' value is
- * supported. Note that this does NOT exclude pathological cases such as empty or null values. A more
- * advanced predicate should be used to deal with such cases.</p>
+ * @deprecated
  */
-public class SimpleAttributePredicate extends AbstractAttributePredicate {
-
-    /** Class logger. */
-    @Nonnull private final Logger log = LoggerFactory.getLogger(SimpleAttributePredicate.class);
-
-    /** Map of attribute IDs to values. */
-    @Nonnull @NonnullElements private ListMultimap<String,String> attributeValueMap;
-    
-    /** Optional scope to check. */
-    @Nullable @NotEmpty private String scope;
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class SimpleAttributePredicate extends net.shibboleth.profile.context.logic.SimpleAttributePredicate {
     
     /** Constructor. */
     public SimpleAttributePredicate() {
-        attributeValueMap = ArrayListMultimap.create();
-    }
-
-    /**
-     * Set the map of attribute/value pairs (as a map of string collections) to check for.
-     * 
-     * @param map   map of attribute/value pairs
-     */
-    public void setAttributeValueMap(@Nonnull @NonnullElements final Map<String,Collection<String>> map) {
-        Constraint.isNotNull(map, "Attribute/value map cannot be null");
-        
-        attributeValueMap.clear();
-        for (final Map.Entry<String,Collection<String>> entry : map.entrySet()) {
-            final String attributeId = StringSupport.trimOrNull(entry.getKey());
-            attributeValueMap.putAll(attributeId, StringSupport.normalizeStringCollection(entry.getValue()));
-        }
-    }
-    
-    /**
-     * Set a scope to check for.
-     * 
-     * <p>If set, values that "match" must be scoped with this value. A "*" will match any scope, but
-     * one must exist.</p>
-     * 
-     * @param s scope to check for
-     * 
-     * @since 4.2.0
-     */
-    public void setScope(@Nullable @NotEmpty final String s) {
-        scope = StringSupport.trimOrNull(s);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected boolean allowNullAttributeContext() {
-        return attributeValueMap.isEmpty() && scope == null;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected boolean hasMatch(final Map<String, IdPAttribute> attributeMap) {
-        for (final String id : attributeValueMap.keySet()) {
-            log.debug("Checking for attribute: {}", id);
-
-            final IdPAttribute attribute = attributeMap.get(id);
-            if (attribute == null) {
-                log.debug("Attribute {} not found in context", id);
-                return false;
-            }
-
-            boolean matched = false;
-
-            for (final String value : attributeValueMap.get(id)) {
-                if (findMatch(value, attribute)) {
-                    matched = true;
-                    break;
-                }
-            }
-
-            if (!matched) {
-                log.debug("Attribute {} values not matched", id);
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Look for a matching value in an attribute.
-     * 
-     * @param toMatch   value to look for
-     * @param attribute attribute to check
-     * 
-     * @return true iff the value is one of the attribute's values
-     */
-// Checkstyle: CyclomaticComplexity OFF
-    protected boolean findMatch(@Nonnull @NotEmpty final String toMatch, @Nonnull final IdPAttribute attribute) {
-        
-        if ("*".equals(toMatch) && scope == null) {
-            log.debug("Wildcard (*) value rule for attribute {}", attribute.getId());
-            return true;
-        }
-        
-        for (final IdPAttributeValue value : attribute.getValues()) {
-            if (scope != null && value instanceof ScopedStringAttributeValue) {
-                final String scopeCopy = scope;
-                if ("*".equals(toMatch) || toMatch.equals(((ScopedStringAttributeValue) value).getValue())) {
-                    if ("*".equals(scopeCopy) || scopeCopy.equals(((ScopedStringAttributeValue) value).getScope())) {
-                        log.debug("Found matching value ({}) and scope ({}) in attribute {}", toMatch, scopeCopy,
-                                attribute.getId());
-                        return true;
-                    }
-                }
-            } else if (scope == null && value instanceof StringAttributeValue) {
-                if (toMatch.equals(((StringAttributeValue) value).getValue())) {
-                    log.debug("Found matching value ({}) in attribute {}", toMatch, attribute.getId());
-                    return true;
-                }
-            }
-        }
-        
-        return false;
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.SimpleAttributePredicate.class.getName());
     }
-// Checkstyle: CyclomaticComplexity ON
 
 }
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
index 4ec918d15..ff25b41ff 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
@@ -18,21 +18,19 @@
 package net.shibboleth.idp.profile.logic;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import net.shibboleth.shared.annotation.ParameterName;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.springframework.expression.EvaluationContext;
+import net.shibboleth.shared.primitive.DeprecationSupport;
+import net.shibboleth.shared.primitive.DeprecationSupport.ObjectType;
 
 /**
- * Predicate whose condition is defined by an Spring EL expression.
+ * Deprecated stub for relocated class.
  * 
- * @author Daniel Lutz
+ * @deprecated
  */
-public class SpringExpressionPredicate
-    extends net.shibboleth.shared.spring.expression.SpringExpressionPredicate<ProfileRequestContext> {
+ at Deprecated(since="5.0.0", forRemoval=true)
+public class SpringExpressionPredicate extends net.shibboleth.profile.context.logic.SpringExpressionPredicate {
 
     /**
      * Constructor.
@@ -41,14 +39,8 @@ public class SpringExpressionPredicate
      */
     public SpringExpressionPredicate(@Nonnull @NotEmpty @ParameterName(name="expression") final String expression) {
         super(expression);
-        setInputType(ProfileRequestContext.class);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void prepareContext(@Nonnull final EvaluationContext context, @Nullable final Object... input) {
-        super.prepareContext(context, input);
-        context.setVariable("profileContext", input != null ? input[0] : input);
+        DeprecationSupport.warn(ObjectType.CLASS, getClass().getName(), null,
+                net.shibboleth.profile.context.logic.SpringExpressionPredicate.class.getName());
     }
 
 }
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/VerifiedProfilePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/VerifiedProfilePredicate.java
deleted file mode 100644
index 11ac5d61a..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/VerifiedProfilePredicate.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import javax.annotation.Nullable;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-
-/**
- * Predicate to determine whether a profile request is from a verified source.
- */
-public class VerifiedProfilePredicate extends AbstractRelyingPartyPredicate {
-
-    /** {@inheritDoc} */
-    public boolean test(@Nullable final ProfileRequestContext input) {
-        if (input != null) {
-            final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
-            if (rpc != null) {
-                return rpc.isVerified();
-            }
-        }
-        
-        return true;
-    }
-
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/AbstractRelyingPartyPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/AbstractRelyingPartyPredicate.java
deleted file mode 100644
index eda0d0b08..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/AbstractRelyingPartyPredicate.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic.messaging;
-
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-import javax.annotation.Nonnull;
-
-import org.opensaml.messaging.context.InOutOperationContext;
-import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.messaging.context.navigate.ChildContextLookup;
-import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.logic.Constraint;
-
-/**
- * Abstract base class for a predicate that evaluates a {@link MessageContext} 
- * and which requires a {@link RelyingPartyContext} obtained via a lookup function,
- * by default a child of the {@link InOutOperationContext} 
- * the parent of the specified {@link MessageContext}.
- */
-public abstract class AbstractRelyingPartyPredicate implements Predicate<MessageContext> {
-
-    /**
-     * Strategy used to locate the {@link RelyingPartyContext} associated with a given {@link MessageContext}.
-     */
-    @Nonnull private Function<MessageContext,RelyingPartyContext> relyingPartyContextLookupStrategy;
-    
-    /** Constructor. */
-    public AbstractRelyingPartyPredicate() {
-        relyingPartyContextLookupStrategy =
-                new ChildContextLookup<>(RelyingPartyContext.class).compose(
-                        new RecursiveTypedParentContextLookup<>(InOutOperationContext.class));
-    }
-
-    /**
-     * Set the strategy used to locate the {@link RelyingPartyContext} associated with a given
-     * {@link MessageContext}.
-     * 
-     * @param strategy lookup strategy
-     */
-    public void setRelyingPartyContextLookupStrategy(
-            @Nonnull final Function<MessageContext,RelyingPartyContext> strategy) {
-        relyingPartyContextLookupStrategy =
-                Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
-    }
-    
-    /**
-     * Get the strategy used to locate the {@link RelyingPartyContext} associated with a given
-     * {@link MessageContext}.
-     * 
-     * @return lookup strategy
-     */
-    @Nonnull public Function<MessageContext,RelyingPartyContext> getRelyingPartyContextLookupStrategy() {
-        return relyingPartyContextLookupStrategy;
-    }
-
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/package-info.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/package-info.java
deleted file mode 100644
index ba5ee8e0b..000000000
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/messaging/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Predicates for IdP-specific messaging profiles.
- */
-
-package net.shibboleth.idp.profile.logic.messaging;
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/package-info.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/package-info.java
index fc3f52cff..dfc734e9c 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/package-info.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/package-info.java
@@ -16,7 +16,7 @@
  */
 
 /**
- * Functions and predicates supporting other profile components.
+ * This is a legacy package and will be removed in V6.
  */
 
 package net.shibboleth.idp.profile.logic;
\ No newline at end of file
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java
deleted file mode 100644
index 6b424e3dd..000000000
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DateAttributePredicateTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import net.shibboleth.idp.attribute.DateTimeAttributeValue;
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.profile.context.RelyingPartyContext;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.time.Instant;
-import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static org.testng.Assert.*;
-
-/**
- * Unit test for {@link DateAttributePredicate}.
- */
-public class DateAttributePredicateTest {
-    
-    private final java.time.format.DateTimeFormatter javaformatter =
-            java.time.format.DateTimeFormatter.ISO_ZONED_DATE_TIME;
-
-    @DataProvider(name = "test-data-java")
-    public Object[][] provideTestDataJava() {
-        return new Object[][] {
-                // Future date matches
-                new Object[] {
-                        new DateAttributePredicate("expirationDate", javaformatter),
-                        "expirationDate",
-                        javaDateStrings(java.time.Duration.ofDays(1)),
-                        true,
-                },
-                // Current date does not match
-                new Object[] {
-                        new DateAttributePredicate("expirationDate", javaformatter),
-                        "expirationDate",
-                        javaDateStrings(java.time.Duration.ZERO),
-                        false,
-                },
-                // Past date does not match
-                new Object[] {
-                        new DateAttributePredicate("expirationDate", javaformatter),
-                        "expirationDate",
-                        javaDateStrings(java.time.Duration.ofDays(-1)),
-                        false,
-                },
-                // Increase target date by 90 days
-                new Object[] {
-                        newJavaPredicate("expirationDate", java.time.Duration.ofDays(90)),
-                        "expirationDate",
-                        javaDateStrings(java.time.Duration.ofDays(91)),
-                        true,
-                },
-                // Decrease target date by 30 days
-                // e.g. expiration warning case
-                new Object[] {
-                        newJavaPredicate("expirationDate", java.time.Duration.ofDays(-30)),
-                        "expirationDate",
-                        javaDateStrings(java.time.Duration.ofDays(29)),
-                        false,
-                },
-        };
-    }
-
-
-    @Test(dataProvider = "test-data-java")
-    public void testJavaTime(
-            final DateAttributePredicate predicate,
-            final String attribute,
-            final String[] values,
-            final boolean expected) throws Exception {
-        assertEquals(predicate.test(createProfileRequestContext(attribute, values, null)), expected);
-    }
-
-    @Test
-    public void testDateTimeValues() {
-        final DateAttributePredicate predicate = new DateAttributePredicate("test");
-        
-        assertTrue(predicate.test(createProfileRequestContext("test", null,
-                new Instant[] {Instant.now().plus(java.time.Duration.ofMinutes(5))})));
-        
-        predicate.setOffset(java.time.Duration.ofMinutes(-10));
-        
-        assertFalse(predicate.test(createProfileRequestContext("test", null,
-                new Instant[] {Instant.now().plus(java.time.Duration.ofMinutes(5))})));
-    }
-    
-    
-    private ProfileRequestContext createProfileRequestContext(final String name, final String[] values, final Instant[] dtvalues) {
-        final ProfileRequestContext prc = new ProfileRequestContext();
-        final RelyingPartyContext rpc = new RelyingPartyContext();
-        final IdPAttribute attribute = new IdPAttribute(name);
-        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
-        if (values != null) {
-            for (String value : values) {
-                attributeValues.add(new StringAttributeValue(value));
-            }
-        }
-        if (dtvalues != null) {
-            for (Instant value : dtvalues) {
-                attributeValues.add(new DateTimeAttributeValue(value));
-            }
-        }
-        attribute.setValues(attributeValues);
-        final AttributeContext ac = new AttributeContext();
-        ac.setIdPAttributes(Collections.singletonList(attribute));
-        ac.setUnfilteredIdPAttributes(Collections.singletonList(attribute));
-        rpc.addSubcontext(ac);
-        prc.addSubcontext(rpc);
-        return prc;
-    }
-
-    /**
-     * Produces an array of date strings that are offsets from current system time.
-     *
-     * @param offsets One or more durations that are added to the current system time.
-     *
-     * @return Array of date strings, one for each provided offset.
-     */
-    private String[] javaDateStrings(final java.time.Duration ... offsets) {
-        final String[] dates = new String[offsets.length];
-        for (int i = 0; i < offsets.length; i++) {
-            dates[i] = javaformatter.format(ZonedDateTime.now().plus(offsets[i]));
-        }
-        return dates;
-    }
-    
-    private DateAttributePredicate newJavaPredicate(final String attribute, final java.time.Duration offset) {
-        final DateAttributePredicate p = new DateAttributePredicate(attribute, javaformatter);
-        p.setOffset(offset);
-        return p;
-    }
-    
-}
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicateTest.java
deleted file mode 100644
index 3dc7e939c..000000000
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/DynamicAttributePredicateTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.logic.FunctionSupport;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.*;
-
-/**
- * Unit test for {@link DynamicAttributePredicate}.
- */
- at SuppressWarnings("javadoc")
-public class DynamicAttributePredicateTest {
-
-    @Test
-    public void testInvalid() {
-        final ProfileRequestContext prc = createProfileRequestContext("foo", List.of("bar", "baz"));
-        DynamicAttributePredicate predicate = new DynamicAttributePredicate();
-        
-        predicate.setAttributeFunctionMap(Map.of("foo", Collections.singleton(FunctionSupport.constant(List.of(10)))));
-        assertFalse(predicate.test(prc));
-
-        predicate.setAttributeFunctionMap(Map.of("foo", Collections.singleton(FunctionSupport.constant(10))));
-        assertFalse(predicate.test(prc));
-    }
-
-    @Test
-    public void testString() {
-        final ProfileRequestContext prc = createProfileRequestContext("foo", List.of("bar", "baz"));
-        DynamicAttributePredicate predicate = new DynamicAttributePredicate();
-        
-        predicate.setAttributeFunctionMap(Map.of("foo2", Collections.singleton(FunctionSupport.constant(List.of("bar")))));
-        assertFalse(predicate.test(prc));
-
-        predicate.setAttributeFunctionMap(Map.of("foo2", Collections.singleton(FunctionSupport.constant("bar"))));
-        assertFalse(predicate.test(prc));
-
-        predicate.setAttributeFunctionMap(Map.of("foo2", Collections.singleton(FunctionSupport.constant("*"))));
-        assertFalse(predicate.test(prc));
-
-        predicate.setAttributeFunctionMap(Map.of("foo", Collections.singleton(FunctionSupport.constant("*"))));
-        assertTrue(predicate.test(prc));
-
-        predicate.setAttributeFunctionMap(Map.of("foo", Collections.singleton(FunctionSupport.constant(List.of("bar", "baz")))));
-        assertTrue(predicate.test(prc));
-    }
-    
-    private ProfileRequestContext createProfileRequestContext(final String name, final Collection<String> values) {
-        final ProfileRequestContext prc = new ProfileRequestContext();
-        final RelyingPartyContext rpc = new RelyingPartyContext();
-        final IdPAttribute attribute = new IdPAttribute(name);
-        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
-        for (final String value : values) {
-            final int i = value.indexOf('@');
-            if (i == -1) {
-                attributeValues.add(new StringAttributeValue(value));
-            } else {
-                attributeValues.add(new ScopedStringAttributeValue(value.substring(0,i), value.substring(i + 1)));
-            }
-        }
-        attribute.setValues(attributeValues);
-        final AttributeContext ac = new AttributeContext();
-        ac.setIdPAttributes(Collections.singletonList(attribute));
-        ac.setUnfilteredIdPAttributes(Collections.singletonList(attribute));
-        rpc.addSubcontext(ac);
-        prc.addSubcontext(rpc);
-        return prc;
-    }
-   
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicateTest.java
deleted file mode 100644
index da22e035c..000000000
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicateTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import java.util.Map;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.logic.FunctionSupport;
-
-import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-/** Unit test for {@link LoopDetectionPredicate}. */
- at SuppressWarnings("javadoc")
-public class LoopDetectionPredicateTest extends OpenSAMLInitBaseTestCase {
-
-    private ProfileRequestContext prc;
-    private RelyingPartyContext rpCtx;
-    private LoopDetectionPredicate pred;
-    
-    @BeforeMethod
-    public void setUp() {
-        prc = new ProfileRequestContext();
-        rpCtx = prc.getOrCreateSubcontext(RelyingPartyContext.class);
-        pred = new LoopDetectionPredicate();
-        pred.setUsernameLookupStrategy(FunctionSupport.constant("jdoe.1"));
-    }
-    
-    @Test
-    public void testNoMap() {
-        Assert.assertFalse(pred.test(prc));
-        
-        rpCtx.setRelyingPartyId("foo");
-        Assert.assertFalse(pred.test(prc));
-    }
-
-    @Test
-    public void testNoMatch() {
-        pred.setRelyingPartyMap(Map.of("bar", "bar"));
-        
-        rpCtx.setRelyingPartyId("foo");
-        Assert.assertFalse(pred.test(prc));
-    }
-
-    @Test
-    public void testMatch() {
-        pred.setRelyingPartyMap(Map.of("foo", "foo"));
-        
-        rpCtx.setRelyingPartyId("foo");
-        Assert.assertFalse(pred.test(prc));
-    }
-
-    @Test
-    public void testExceed() throws InterruptedException {
-        pred.setRelyingPartyMap(Map.of("bar", "bar"));
-        
-        rpCtx.setRelyingPartyId("bar");
-        for (int i=0; i<20; ++i) {
-            Assert.assertFalse(pred.test(prc));
-        }
-        Assert.assertTrue(pred.test(prc));
-    }
-
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/ScriptedPredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/ScriptedPredicateTest.java
deleted file mode 100644
index e944a6cb1..000000000
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/ScriptedPredicateTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import javax.script.ScriptException;
-
-import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.shared.spring.custom.SchemaTypeAwareXMLBeanDefinitionReader;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.core.io.ClassPathResource;
-import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-/**
- * Tests for {@link ScriptedPredicate}.
- */
- at SuppressWarnings("javadoc")
-public class ScriptedPredicateTest {
-
-    private ProfileRequestContext withChild;
-
-    private ProfileRequestContext noChild;
-
-    @BeforeClass public void setup() {
-        withChild = new ProfileRequestContext();
-        withChild.getOrCreateSubcontext(RelyingPartyContext.class);
-        noChild = new ProfileRequestContext();
-    }
-
-    @Test public void simple() throws ScriptException {
-        ScriptedPredicate test = ScriptedPredicate.inlineScript("new java.lang.Boolean(true);");
-        Assert.assertTrue(test.test(withChild));
-
-        test = ScriptedPredicate.inlineScript("true");
-        Assert.assertTrue(test.test(withChild));
-
-        test = ScriptedPredicate.inlineScript("false");
-        Assert.assertFalse(test.test(withChild));
-
-        test = ScriptedPredicate.inlineScript("\"thirty\"");
-        Assert.assertFalse(test.test(withChild));
-    }
-    
-    @Test public void custom() throws ScriptException {
-        ScriptedPredicate test = ScriptedPredicate.inlineScript("custom;");
-        test.setCustomObject(Boolean.valueOf(true));
-        Assert.assertTrue(test.test(withChild));
-
-        test.setCustomObject(Boolean.valueOf(false));
-        Assert.assertFalse(test.test(withChild));
-
-    }
-    @Test public void inlineBean() throws ScriptException {
-
-        try (final GenericApplicationContext ctx = new GenericApplicationContext()) {
-            final SchemaTypeAwareXMLBeanDefinitionReader beanDefinitionReader =
-                    new SchemaTypeAwareXMLBeanDefinitionReader(ctx);
-
-            beanDefinitionReader.loadBeanDefinitions(new ClassPathResource(
-                    "/net/shibboleth/idp/profile/logic/inlineBean.xml"));
-
-            ctx.refresh();
-            final ScriptedPredicate rule = ctx.getBean(ScriptedPredicate.class);
-
-            Assert.assertTrue(rule.test(withChild));
-
-            Assert.assertFalse(rule.test(noChild));
-        }
-    }
-
-    @Test public void resourceBean() throws ScriptException {
-
-        try (final GenericApplicationContext ctx = new GenericApplicationContext()) {
-            final SchemaTypeAwareXMLBeanDefinitionReader beanDefinitionReader =
-                    new SchemaTypeAwareXMLBeanDefinitionReader(ctx);
-
-            beanDefinitionReader.loadBeanDefinitions(new ClassPathResource(
-                    "/net/shibboleth/idp/profile/logic/resourceBean.xml"));
-
-            ctx.refresh();
-            final ScriptedPredicate rule = ctx.getBean(ScriptedPredicate.class);
-
-            Assert.assertTrue(rule.test(withChild));
-
-            Assert.assertFalse(rule.test(noChild));
-        }
-    }
-
-}
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicateTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicateTest.java
deleted file mode 100644
index d68ca010e..000000000
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicateTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.profile.logic;
-
-import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.IdPAttributeValue;
-import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
-import net.shibboleth.idp.attribute.StringAttributeValue;
-import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.profile.context.RelyingPartyContext;
-
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.*;
-
-/**
- * Unit test for {@link SimpleAttributePredicate}.
- */
- at SuppressWarnings("javadoc")
-public class SimpleAttributePredicateTest {
-
-    @Test
-    public void testString() {
-        final ProfileRequestContext prc = createProfileRequestContext("foo", List.of("bar", "baz"));
-        SimpleAttributePredicate predicate = new SimpleAttributePredicate();
-        
-        predicate.setAttributeValueMap(Map.of("foo2", List.of("bar")));
-        assertFalse(predicate.test(prc));
-        
-        predicate.setAttributeValueMap(Map.of("foo2", List.of("*")));
-        assertFalse(predicate.test(prc));
-
-        predicate.setAttributeValueMap(Map.of("foo", List.of("*")));
-        assertTrue(predicate.test(prc));
-
-        predicate.setAttributeValueMap(Map.of("foo", List.of("bar", "baz")));
-        assertTrue(predicate.test(prc));
-        
-        predicate.setScope("zorkmid");
-        assertFalse(predicate.test(prc));
-    }
-    
-    @Test
-    public void testScoped() {
-        final ProfileRequestContext prc = createProfileRequestContext("foo", List.of("bar at scope1", "baz at scope2"));
-        SimpleAttributePredicate predicate = new SimpleAttributePredicate();
-        
-        predicate.setAttributeValueMap(Map.of("foo", List.of("bar")));
-        assertTrue(predicate.test(prc));
-        
-        predicate.setAttributeValueMap(Map.of("foo", List.of("*")));
-        assertTrue(predicate.test(prc));
-
-        predicate.setScope("zorkmid");
-        assertFalse(predicate.test(prc));
-        
-        predicate.setScope("*");
-        assertTrue(predicate.test(prc));
-
-        predicate.setAttributeValueMap(Map.of("foo", List.of("bar", "baz")));
-        assertTrue(predicate.test(prc));
-        
-        predicate.setScope("scope1");
-        assertTrue(predicate.test(prc));
-
-        predicate.setScope("scope2");
-        assertTrue(predicate.test(prc));
-
-        predicate.setAttributeValueMap(Map.of("foo", List.of("bar")));
-        assertFalse(predicate.test(prc));
-    }
-    
-    private ProfileRequestContext createProfileRequestContext(final String name, final Collection<String> values) {
-        final ProfileRequestContext prc = new ProfileRequestContext();
-        final RelyingPartyContext rpc = new RelyingPartyContext();
-        final IdPAttribute attribute = new IdPAttribute(name);
-        final List<IdPAttributeValue> attributeValues = new ArrayList<>();
-        for (final String value : values) {
-            final int i = value.indexOf('@');
-            if (i == -1) {
-                attributeValues.add(new StringAttributeValue(value));
-            } else {
-                attributeValues.add(new ScopedStringAttributeValue(value.substring(0,i), value.substring(i + 1)));
-            }
-        }
-        attribute.setValues(attributeValues);
-        final AttributeContext ac = new AttributeContext();
-        ac.setIdPAttributes(Collections.singletonList(attribute));
-        ac.setUnfilteredIdPAttributes(Collections.singletonList(attribute));
-        rpc.addSubcontext(ac);
-        prc.addSubcontext(rpc);
-        return prc;
-    }
-   
-}
\ No newline at end of file
diff --git a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/inlineBean.xml b/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/inlineBean.xml
deleted file mode 100644
index d2269a107..000000000
--- a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/inlineBean.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
-    xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
-
-    <bean id="testBean" class="net.shibboleth.idp.profile.logic.ScriptedPredicate"
-            factory-method="inlineScript">
-        <constructor-arg>
-            <value>
-<![CDATA[
-       value = true;
-       if (null == profileContext.getSubcontext("net.shibboleth.profile.context.RelyingPartyContext")) {
-         value = false;
-       }
-       value;
-]]>
-            </value>
-        </constructor-arg>
-    </bean>
-</beans>
\ No newline at end of file
diff --git a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/resourceBean.xml b/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/resourceBean.xml
deleted file mode 100644
index a314750bd..000000000
--- a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/resourceBean.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:context="http://www.springframework.org/schema/context"
-	xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
-	xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
-	default-init-method="initialize">
-
-	<bean id="testBean" class="net.shibboleth.idp.profile.logic.ScriptedPredicate"
-		  factory-method="resourceScript" c:resource="classpath:/net/shibboleth/idp/profile/logic/script.js"/>
-</beans>
\ No newline at end of file
diff --git a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/script.js b/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/script.js
deleted file mode 100644
index 4da3293b1..000000000
--- a/idp-profile-api/src/test/resources/net/shibboleth/idp/profile/logic/script.js
+++ /dev/null
@@ -1,5 +0,0 @@
-value = true;
-if (null == profileContext.getSubcontext("net.shibboleth.profile.context.RelyingPartyContext")) {
-  value = false;
-}
-value;
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/IncludeAttributeStatementPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/IncludeAttributeStatementPredicate.java
index 156616baa..431297ebc 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/IncludeAttributeStatementPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/IncludeAttributeStatementPredicate.java
@@ -24,7 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -71,7 +71,7 @@ public class IncludeAttributeStatementPredicate extends AbstractRelyingPartyPred
             return true;
         }
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/NotBeforeProfileConfigPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/NotBeforeProfileConfigPredicate.java
index 23f4ca31c..d17fa79dc 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/NotBeforeProfileConfigPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/NotBeforeProfileConfigPredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLProfileConfiguration;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -37,7 +37,7 @@ public class NotBeforeProfileConfigPredicate extends AbstractRelyingPartyPredica
 
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SAMLProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignAssertionsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignAssertionsPredicate.java
index a86480cf8..27799e568 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignAssertionsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignAssertionsPredicate.java
@@ -29,7 +29,7 @@ import org.opensaml.saml.saml2.metadata.SPSSODescriptor;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLProfileConfiguration;
 import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 import net.shibboleth.shared.logic.Constraint;
@@ -87,7 +87,7 @@ public class SignAssertionsPredicate extends AbstractRelyingPartyPredicate {
             }
         }
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc instanceof SAMLProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignRequestsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignRequestsPredicate.java
index 10999fd41..5d55e3401 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignRequestsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignRequestsPredicate.java
@@ -24,7 +24,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLProfileConfiguration;
 import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 import net.shibboleth.shared.logic.Constraint;
@@ -94,7 +94,7 @@ public class SignRequestsPredicate extends AbstractRelyingPartyPredicate {
             }
         }
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SAMLProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignResponsesPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignResponsesPredicate.java
index 2e470f401..c8e1cb234 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignResponsesPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/SignResponsesPredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLProfileConfiguration;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -32,7 +32,7 @@ public class SignResponsesPredicate extends AbstractRelyingPartyPredicate {
     
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc instanceof SAMLProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSArtifactRequestsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSArtifactRequestsPredicate.java
index 48d61e015..a5244c288 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSArtifactRequestsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSArtifactRequestsPredicate.java
@@ -23,7 +23,7 @@ import org.opensaml.messaging.context.MessageContext;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.messaging.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.messaging.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLArtifactConsumerProfileConfiguration;
 
 /** A predicate implementation that forwards to 
@@ -32,7 +32,7 @@ public class ClientTLSArtifactRequestsPredicate extends AbstractRelyingPartyPred
     
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SAMLArtifactConsumerProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSSOAPLogoutRequestsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSSOAPLogoutRequestsPredicate.java
index 8a294082a..dff7c30c8 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSSOAPLogoutRequestsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/ClientTLSSOAPLogoutRequestsPredicate.java
@@ -23,7 +23,7 @@ import org.opensaml.messaging.context.MessageContext;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.messaging.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.messaging.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.SingleLogoutProfileConfiguration;
 
 /** A predicate implementation that forwards to 
@@ -32,7 +32,7 @@ public class ClientTLSSOAPLogoutRequestsPredicate extends AbstractRelyingPartyPr
     
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SingleLogoutProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignArtifactRequestsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignArtifactRequestsPredicate.java
index 7cf968d86..ac85ce816 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignArtifactRequestsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignArtifactRequestsPredicate.java
@@ -23,7 +23,7 @@ import org.opensaml.messaging.context.MessageContext;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.messaging.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.messaging.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.profile.config.SAMLArtifactConsumerProfileConfiguration;
 
 /** A predicate implementation that forwards to 
@@ -32,7 +32,7 @@ public class SignArtifactRequestsPredicate extends AbstractRelyingPartyPredicate
     
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SAMLArtifactConsumerProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignSOAPLogoutRequestsPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignSOAPLogoutRequestsPredicate.java
index a9a00abb5..25ff2a7de 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignSOAPLogoutRequestsPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/profile/config/logic/messaging/SignSOAPLogoutRequestsPredicate.java
@@ -23,7 +23,7 @@ import org.opensaml.messaging.context.MessageContext;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.messaging.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.messaging.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.SingleLogoutProfileConfiguration;
 
 /** A predicate implementation that forwards to 
@@ -32,7 +32,7 @@ public class SignSOAPLogoutRequestsPredicate extends AbstractRelyingPartyPredica
     
     /** {@inheritDoc} */
     public boolean test(@Nullable final MessageContext input) {
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc != null && pc instanceof SingleLogoutProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/CheckAddressPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/CheckAddressPredicate.java
index 7b58017ce..042593796 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/CheckAddressPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/CheckAddressPredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.BrowserSSOProfileConfiguration;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,7 +39,7 @@ public class CheckAddressPredicate extends AbstractRelyingPartyPredicate {
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc instanceof BrowserSSOProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreRequestSignaturesPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreRequestSignaturesPredicate.java
index af2c2247f..f4d9d6296 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreRequestSignaturesPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreRequestSignaturesPredicate.java
@@ -24,7 +24,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.SAML2ProfileConfiguration;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
@@ -39,7 +39,7 @@ public class IgnoreRequestSignaturesPredicate extends AbstractRelyingPartyPredic
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         
-        final RelyingPartyContext rpCtx = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpCtx = getRelyingPartyContext(input);
         if (input == null || rpCtx == null) {
             log.debug("No RelyingPartyContext found, assuming signatures should be checked");
             return false;
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreScopingProfileConfigPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreScopingProfileConfigPredicate.java
index dd5710c48..ea332a0d9 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreScopingProfileConfigPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/IgnoreScopingProfileConfigPredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.BrowserSSOProfileConfiguration;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,7 +39,7 @@ public class IgnoreScopingProfileConfigPredicate extends AbstractRelyingPartyPre
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc instanceof BrowserSSOProfileConfiguration) {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SOAPErrorPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SOAPErrorPredicate.java
index 417bb23ca..909bcd994 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SOAPErrorPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SOAPErrorPredicate.java
@@ -28,7 +28,7 @@ import org.opensaml.profile.context.navigate.CurrentOrPreviousEventLookup;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.ECPProfileConfiguration;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -68,7 +68,7 @@ public class SOAPErrorPredicate extends AbstractRelyingPartyPredicate {
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         
-        final RelyingPartyContext rpCtx = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpCtx = getRelyingPartyContext(input);
         if (rpCtx == null) {
             log.debug("No RelyingPartyContext found, assuming error handled with SOAP fault");
             return true;
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SuppressAuthenticatingAuthorityPredicate.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SuppressAuthenticatingAuthorityPredicate.java
index 20aa13e06..ff66bc65d 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SuppressAuthenticatingAuthorityPredicate.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/saml2/profile/config/logic/SuppressAuthenticatingAuthorityPredicate.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.profile.config.ProfileConfiguration;
 import net.shibboleth.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 import net.shibboleth.idp.saml.saml2.profile.config.BrowserSSOProfileConfiguration;
 
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -39,7 +39,7 @@ public class SuppressAuthenticatingAuthorityPredicate extends AbstractRelyingPar
     /** {@inheritDoc} */
     public boolean test(@Nullable final ProfileRequestContext input) {
         
-        final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
+        final RelyingPartyContext rpc = getRelyingPartyContext(input);
         if (rpc != null) {
             final ProfileConfiguration pc = rpc.getProfileConfig();
             if (pc instanceof BrowserSSOProfileConfiguration) {
diff --git a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/relyingparty/impl/RelyingPartyConfigurationSupport.java b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/relyingparty/impl/RelyingPartyConfigurationSupport.java
index e3150fbd2..5405436c8 100644
--- a/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/relyingparty/impl/RelyingPartyConfigurationSupport.java
+++ b/idp-saml-impl/src/main/java/net/shibboleth/idp/saml/relyingparty/impl/RelyingPartyConfigurationSupport.java
@@ -33,7 +33,7 @@ import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import net.shibboleth.idp.profile.relyingparty.RelyingPartyConfiguration;
 import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 import net.shibboleth.idp.saml.profile.logic.MappedEntityAttributesPredicate;
-import net.shibboleth.profile.logic.RelyingPartyIdPredicate;
+import net.shibboleth.profile.context.logic.RelyingPartyIdPredicate;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.logic.StrategyIndirectedPredicate;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list