diff --git a/config/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java b/config/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java index 0f23a77f70..d3dd04a7d9 100644 --- a/config/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java +++ b/config/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java @@ -94,7 +94,7 @@ public final class SecurityNamespaceHandler implements NamespaceHandler { if (!namespaceMatchesVersion(element)) { pc.getReaderContext().fatal("You cannot use a spring-security-2.0.xsd or spring-security-3.0.xsd or " + "spring-security-3.1.xsd schema or spring-security-3.2.xsd schema or spring-security-4.0.xsd schema " - + "with Spring Security 5.4. Please update your schema declarations to the 5.4 schema.", element); + + "with Spring Security 5.6. Please update your schema declarations to the 5.6 schema.", element); } String name = pc.getDelegate().getLocalName(element); BeanDefinitionParser parser = this.parsers.get(name); @@ -215,7 +215,7 @@ public final class SecurityNamespaceHandler implements NamespaceHandler { private boolean matchesVersionInternal(Element element) { String schemaLocation = element.getAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation"); - return schemaLocation.matches("(?m).*spring-security-5\\.4.*.xsd.*") + return schemaLocation.matches("(?m).*spring-security-5\\.6.*.xsd.*") || schemaLocation.matches("(?m).*spring-security.xsd.*") || !schemaLocation.matches("(?m).*spring-security.*"); } diff --git a/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java b/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java index 865462456d..306ae257be 100644 --- a/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java +++ b/config/src/test/java/org/springframework/security/config/util/InMemoryXmlApplicationContext.java @@ -16,18 +16,42 @@ package org.springframework.security.config.util; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractXmlApplicationContext; import org.springframework.core.io.Resource; +import org.springframework.security.core.SpringSecurityCoreVersion; import org.springframework.security.util.InMemoryResource; /** * @author Luke Taylor * @author Eddú Meléndez + * @author Emil Sierżęga */ public class InMemoryXmlApplicationContext extends AbstractXmlApplicationContext { + private static String getCurrentXSDVersionFromSpringSchemas() { + Properties properties = new Properties(); + try (InputStream is = SpringSecurityCoreVersion.class.getClassLoader() + .getResourceAsStream("META-INF/spring.schemas")) { + properties.load(is); + } + catch (IOException ex) { + throw new RuntimeException("Could not read 'META-INF/spring.schemas'", ex); + } + + String inPackageLocation = properties + .getProperty("https://www.springframework.org/schema/security/spring-security.xsd"); + String[] parts = inPackageLocation.split("-"); + String currentXSD = parts[parts.length - 1]; + String currentVersion = currentXSD.replace(".xsd", ""); + return currentVersion; + } + static final String BEANS_OPENING = "