[java-identity-provider] branch master updated: IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers
Scott Cantor
cantor.2 at osu.edu
Wed Feb 19 15:14:56 EST 2020
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=9b7e5e7a2c0eb547d3419c4bc467cd900c2ed42f
The following commit(s) were added to refs/heads/master by this push:
new 9b7e5e7 IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers
9b7e5e7 is described below
commit 9b7e5e7a2c0eb547d3419c4bc467cd900c2ed42f
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Feb 19 15:14:52 2020 -0500
IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers
https://issues.shibboleth.net/jira/browse/IDP-1555
---
.../filter/impl/AlgorithmFilterParser.java | 49 +++++++++++++++++-----
.../filter/impl/EntityAttributesFilterParser.java | 49 +++++++++++++++++-----
.../filter/impl/NameIDFormatFilterParser.java | 41 +++++++++++++++---
.../metadata/filter/AlgorithmFilterParserTest.java | 32 ++++++++------
.../relyingparty/metadata/filter/algorithm.xml | 21 +++++++++-
.../metadata/filter/entityAttributes.xml | 6 ++-
.../relyingparty/metadata/filter/nameIDFormat.xml | 1 +
7 files changed, 158 insertions(+), 41 deletions(-)
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
index cf707ee..34682c1 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
@@ -44,6 +44,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
@@ -67,7 +68,7 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
return AlgorithmFilter.class;
}
-// Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
/** {@inheritDoc} */
@Override protected void doParse(final Element element, final ParserContext parserContext,
final BeanDefinitionBuilder builder) {
@@ -83,11 +84,36 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
// Accumulate objects to attach as rule values.
final List<XMLObject> accumulator = new ArrayList<>();
+ // Accumulated map of predicates to objects to attach to inject into filter.
final ManagedMap<Object, ManagedList<XMLObject>> ruleMap = new ManagedMap<>();
+ // Acumulation of entityIDs to use in the next automated Predicate.
+ // Interrupting a sequence of <Entity> elements will end the accumulation.
+ ManagedSet<String> entitySet = new ManagedSet<>();
+
Element child = ElementSupport.getFirstChildElement(element);
while (child != null) {
+
+ if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+ // Add to the active entity set.
+ entitySet.add(ElementSupport.getElementContentAsString(child));
+ child = ElementSupport.getNextSiblingElement(child);
+ continue;
+
+ } else if (!entitySet.isEmpty()) {
+ // "Commit" the current entity set as a single condition against the current accumulator.
+ // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
+ final BeanDefinitionBuilder entityIdBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+ entityIdBuilder.addConstructorArgValue(entitySet);
+ final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
+ forRule.addAll(accumulator);
+ ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+
+ entitySet = new ManagedSet<>();
+ }
+
if (ElementSupport.isElementNamed(child, DigestMethod.DEFAULT_ELEMENT_NAME)) {
try {
accumulator.add(digestUnmarshaller.unmarshall(child));
@@ -106,14 +132,6 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
} catch (final UnmarshallingException e) {
log.error("Error unmarshalling EncryptionMethod element", e);
}
- } else if (ElementSupport
- .isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
- final BeanDefinitionBuilder entityIdBuilder =
- BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
- entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
- final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
- forRule.addAll(accumulator);
- ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
} else if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE,
"ConditionRef")) {
final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
@@ -126,12 +144,23 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
ruleMap.put(ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition(),
forRule);
}
+
child = ElementSupport.getNextSiblingElement(child);
}
+ // Do a final check and commit for a non-empty entity set.
+ if (!entitySet.isEmpty()) {
+ final BeanDefinitionBuilder entityIdBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+ entityIdBuilder.addConstructorArgValue(entitySet);
+ final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
+ forRule.addAll(accumulator);
+ ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+ }
+
builder.addPropertyValue("rules", ruleMap);
}
-// Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
/** {@inheritDoc} */
@Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
index db6d97a..d69ef89 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
@@ -42,6 +42,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
@@ -61,7 +62,7 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
return EntityAttributesFilter.class;
}
-// Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
/** {@inheritDoc} */
@Override protected void doParse(final Element element, final ParserContext parserContext,
final BeanDefinitionBuilder builder) {
@@ -74,8 +75,13 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
// Accumulate Attribute objects to attach as rule values.
final List<Attribute> accumulator = new ArrayList<>();
+ // Accumulated map of predicates to objects to attach to inject into filter.
final ManagedMap<Object, ManagedList<Attribute>> ruleMap = new ManagedMap<>();
+ // Acumulation of entityIDs to use in the next automated Predicate.
+ // Interrupting a sequence of <Entity> elements will end the accumulation.
+ ManagedSet<String> entitySet = new ManagedSet<>();
+
Element child = ElementSupport.getFirstChildElement(element);
// Check for Predicate at the top.
@@ -87,10 +93,31 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
"AttributeFilterScript")) {
builder.addPropertyValue("attributeFilter",
ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition());
+ child = ElementSupport.getNextSiblingElement(child);
}
// Loop over remaining children.
while (child != null) {
+
+ if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+ // Add to the active entity set.
+ entitySet.add(ElementSupport.getElementContentAsString(child));
+ child = ElementSupport.getNextSiblingElement(child);
+ continue;
+
+ } else if (!entitySet.isEmpty()) {
+ // "Commit" the current entity set as a single condition against the current accumulator.
+ // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
+ final BeanDefinitionBuilder entityIdBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+ entityIdBuilder.addConstructorArgValue(entitySet);
+ final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
+ forRule.addAll(accumulator);
+ ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+
+ entitySet = new ManagedSet<>();
+ }
+
if (ElementSupport.isElementNamed(child, Attribute.DEFAULT_ELEMENT_NAME)) {
try {
final XMLObject attribute = unmarshaller.unmarshall(child);
@@ -100,14 +127,6 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
} catch (final UnmarshallingException e) {
log.error("Error unmarshalling Attribute", e);
}
- } else if (ElementSupport
- .isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
- final BeanDefinitionBuilder entityIdBuilder =
- BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
- entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
- final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
- forRule.addAll(accumulator);
- ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
} else if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE,
"ConditionRef")) {
final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
@@ -122,10 +141,20 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
}
child = ElementSupport.getNextSiblingElement(child);
}
+
+ // Do a final check and commit for a non-empty entity set.
+ if (!entitySet.isEmpty()) {
+ final BeanDefinitionBuilder entityIdBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+ entityIdBuilder.addConstructorArgValue(entitySet);
+ final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
+ forRule.addAll(accumulator);
+ ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+ }
builder.addPropertyValue("rules", ruleMap);
}
-// Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
/** {@inheritDoc} */
@Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
index ef64138..a2da4ca 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
@@ -37,6 +37,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
@@ -56,6 +57,7 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
return NameIDFormatFilter.class;
}
+// Checkstyle: MethodLength OFF
/** {@inheritDoc} */
@Override protected void doParse(final Element element, final ParserContext parserContext,
final BeanDefinitionBuilder builder) {
@@ -72,20 +74,37 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
// Accumulate formats to attach as rule values.
final List<String> accumulator = new ArrayList<>();
+ // Accumulated map of predicates to objects to attach to inject into filter.
final ManagedMap<Object, ManagedList<String>> ruleMap = new ManagedMap<>();
+ // Acumulation of entityIDs to use in the next automated Predicate.
+ // Interrupting a sequence of <Entity> elements will end the accumulation.
+ ManagedSet<String> entitySet = new ManagedSet<>();
+
Element child = ElementSupport.getFirstChildElement(element);
while (child != null) {
- if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Format")) {
- accumulator.add(ElementSupport.getElementContentAsString(child));
- } else if (ElementSupport.isElementNamed(child,
- AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+
+ if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+ // Add to the active entity set.
+ entitySet.add(ElementSupport.getElementContentAsString(child));
+ child = ElementSupport.getNextSiblingElement(child);
+ continue;
+
+ } else if (!entitySet.isEmpty()) {
+ // "Commit" the current entity set as a single condition against the current accumulator.
+ // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
final BeanDefinitionBuilder entityIdBuilder =
BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
- entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
+ entityIdBuilder.addConstructorArgValue(entitySet);
final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
forRule.addAll(accumulator);
ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+
+ entitySet = new ManagedSet<>();
+ }
+
+ if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Format")) {
+ accumulator.add(ElementSupport.getElementContentAsString(child));
} else if (ElementSupport.isElementNamed(child,
AbstractMetadataProviderParser.METADATA_NAMESPACE, "ConditionRef")) {
final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
@@ -98,11 +117,23 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
ruleMap.put(ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition(),
forRule);
}
+
child = ElementSupport.getNextSiblingElement(child);
}
+ // Do a final check and commit for a non-empty entity set.
+ if (!entitySet.isEmpty()) {
+ final BeanDefinitionBuilder entityIdBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+ entityIdBuilder.addConstructorArgValue(entitySet);
+ final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
+ forRule.addAll(accumulator);
+ ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+ }
+
builder.addPropertyValue("rules", ruleMap);
}
+// Checkstyle: MethodLength ON
/** {@inheritDoc} */
@Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
index 397350c..778c6f8 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
@@ -70,9 +70,26 @@ public class AlgorithmFilterParserTest extends AbstractMetadataParserTest {
EntityIdCriterion crit = new EntityIdCriterion("https://sp.example.org/sp/shibboleth");
EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(crit));
- Assert.assertNotNull(entity);
+ validate(entity);
+
+ crit = new EntityIdCriterion("https://sp4.example.org/sp/shibboleth");
+ entity = resolver.resolveSingle(new CriteriaSet(crit));
+ if (entity != null) {
+ validate(entity);
+ }
- Extensions exts = entity.getExtensions();
+ crit = new EntityIdCriterion("https://sp2.example.org/sp/shibboleth");
+ entity = resolver.resolveSingle(new CriteriaSet(crit));
+ Assert.assertNotNull(entity);
+ final Extensions exts = entity.getExtensions();
+ if (exts != null) {
+ Assert.assertTrue(exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME).isEmpty());
+ Assert.assertTrue(exts.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME).isEmpty());
+ }
+ }
+
+ private void validate(final EntityDescriptor entity) {
+ final Extensions exts = entity.getExtensions();
Assert.assertNotNull(exts);
List<XMLObject> extElements = exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME);
@@ -106,15 +123,6 @@ public class AlgorithmFilterParserTest extends AbstractMetadataParserTest {
assertEquals(((MGF) mgfs.get(0)).getAlgorithm(), EncryptionConstants.ALGO_ID_MGF1_SHA256);
}
}
-
- crit = new EntityIdCriterion("https://sp2.example.org/sp/shibboleth");
- entity = resolver.resolveSingle(new CriteriaSet(crit));
- Assert.assertNotNull(entity);
- exts = entity.getExtensions();
- if (exts != null) {
- Assert.assertTrue(exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME).isEmpty());
- Assert.assertTrue(exts.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME).isEmpty());
- }
}
-
+
}
\ No newline at end of file
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
index d11e50e..76f14c5 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
@@ -26,10 +26,15 @@
Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
</EncryptionMethod>
<metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:Entity>https://sp3.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:ConditionScript language="javascript">
+ <metadata:Script>input.getEntityID().equals("https://sp3.example.org/sp/shibboleth");</metadata:Script>
+ </metadata:ConditionScript>
</metadata:MetadataFilter>
<EntitiesDescriptor Name="ukgroup">
- <EntityDescriptor ID="uk001502"
+ <EntityDescriptor
entityID="https://sp.example.org/sp/shibboleth">
<SPSSODescriptor
protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
@@ -41,7 +46,7 @@
</SPSSODescriptor>
</EntityDescriptor>
- <EntityDescriptor ID="uk001503"
+ <EntityDescriptor
entityID="https://sp2.example.org/sp/shibboleth">
<SPSSODescriptor
protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
@@ -52,5 +57,17 @@
index="5" />
</SPSSODescriptor>
</EntityDescriptor>
+
+ <EntityDescriptor
+ entityID="https://sp4.example.org/sp/shibboleth">
+ <SPSSODescriptor
+ protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+
+ <AssertionConsumerService
+ Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign"
+ Location="https://sp4.example.org/Shibboleth.sso/SAML2/POST-SimpleSign"
+ index="5" />
+ </SPSSODescriptor>
+ </EntityDescriptor>
</EntitiesDescriptor>
</metadata:MetadataProvider>
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
index fd30d2e..f2a919d 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
@@ -21,10 +21,12 @@
<saml:AttributeValue>barValue</saml:AttributeValue>
</saml:Attribute>
<metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:Entity>https://sp3.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
</metadata:MetadataFilter>
<EntitiesDescriptor Name="ukgroup">
- <EntityDescriptor ID="uk001502"
+ <EntityDescriptor
entityID="https://sp.example.org/sp/shibboleth">
<Extensions>
<mdattr:EntityAttributes>
@@ -44,7 +46,7 @@
</SPSSODescriptor>
</EntityDescriptor>
- <EntityDescriptor ID="uk001503"
+ <EntityDescriptor
entityID="https://sp2.example.org/sp/shibboleth">
<Extensions>
<mdattr:EntityAttributes>
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
index 92d0a54..4e58cb9 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
@@ -10,6 +10,7 @@
<metadata:MetadataFilter xsi:type="metadata:NameIDFormat" removeExistingFormats="true">
<metadata:Format>foo</metadata:Format>
<metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+ <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
<metadata:Format>bar</metadata:Format>
<metadata:Entity>https://sp2.example.org/sp/shibboleth</metadata:Entity>
</metadata:MetadataFilter>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list