Skip to content

Commit eedbf44

Browse files
author
Rob Winch
committed
SEC-2348: Security HTTP Response Headers enabled by default w/ XML
1 parent 2e1e988 commit eedbf44

File tree

14 files changed

+3444
-27
lines changed

14 files changed

+3444
-27
lines changed

config/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ private boolean namespaceMatchesVersion(Element element) {
196196

197197
private boolean matchesVersionInternal(Element element) {
198198
String schemaLocation = element.getAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation");
199-
return schemaLocation.matches("(?m).*spring-security-3\\.2.*.xsd.*")
199+
return schemaLocation.matches("(?m).*spring-security-4\\.0.*.xsd.*")
200200
|| schemaLocation.matches("(?m).*spring-security.xsd.*")
201201
|| !schemaLocation.matches("(?m).*spring-security.*");
202202
}

config/src/main/java/org/springframework/security/config/http/HeadersBeanDefinitionParser.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,24 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {
8080
headerWriters = new ManagedList<BeanMetadataElement>();
8181
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(HeaderWriterFilter.class);
8282

83-
parseCacheControlElement(element);
84-
parseHstsElement(element);
85-
parseXssElement(element, parserContext);
86-
parseFrameOptionsElement(element, parserContext);
87-
parseContentTypeOptionsElement(element);
83+
if(element != null) {
8884

89-
parseHeaderElements(element);
85+
parseCacheControlElement(element);
86+
parseHstsElement(element);
87+
parseXssElement(element, parserContext);
88+
parseFrameOptionsElement(element, parserContext);
89+
parseContentTypeOptionsElement(element);
9090

91+
parseHeaderElements(element);
92+
}
93+
94+
boolean disabled = element != null && "true".equals(element.getAttribute("disabled"));
95+
if(disabled) {
96+
if(!headerWriters.isEmpty()) {
97+
parserContext.getReaderContext().error("Cannot specify <headers disabled=\"true\"> with child elements.", element);
98+
}
99+
return null;
100+
}
91101
if(headerWriters.isEmpty()) {
92102
addCacheControl();
93103
addHsts(null);

config/src/main/java/org/springframework/security/config/http/HttpConfigurationBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,7 @@ private void createFilterSecurityInterceptor(BeanReference authManager) {
638638

639639
private void createAddHeadersFilter() {
640640
Element elmt = DomUtils.getChildElementByTagName(httpElt, Elements.HEADERS);
641-
if (elmt != null) {
642-
this.addHeadersFilter = new HeadersBeanDefinitionParser().parse(elmt, pc);
643-
}
641+
this.addHeadersFilter = new HeadersBeanDefinitionParser().parse(elmt, pc);
644642

645643
}
646644

config/src/main/resources/META-INF/spring.schemas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
http\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-3.2.xsd
1+
http\://www.springframework.org/schema/security/spring-security.xsd=org/springframework/security/config/spring-security-4.0.xsd
2+
http\://www.springframework.org/schema/security/spring-security-4.0.xsd=org/springframework/security/config/spring-security-4.0.xsd
23
http\://www.springframework.org/schema/security/spring-security-3.2.xsd=org/springframework/security/config/spring-security-3.2.xsd
34
http\://www.springframework.org/schema/security/spring-security-3.1.xsd=org/springframework/security/config/spring-security-3.1.xsd
45
http\://www.springframework.org/schema/security/spring-security-3.0.3.xsd=org/springframework/security/config/spring-security-3.0.3.xsd

config/src/main/resources/org/springframework/security/config/spring-security-4.0.rnc

Lines changed: 823 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)