SEC-2230: Polish pull request
This commit is contained in:
@@ -62,10 +62,10 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
private static final String ALLOW_FROM = "ALLOW-FROM";
|
||||
|
||||
private ManagedList headerFactories;
|
||||
private ManagedList headerWriters;
|
||||
|
||||
public BeanDefinition parse(Element element, ParserContext parserContext) {
|
||||
headerFactories = new ManagedList();
|
||||
headerWriters = new ManagedList();
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(HeadersFilter.class);
|
||||
|
||||
parseXssElement(element, parserContext);
|
||||
@@ -74,7 +74,11 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
parseHeaderElements(element);
|
||||
|
||||
builder.addConstructorArgValue(headerFactories);
|
||||
if(headerWriters.isEmpty()) {
|
||||
parserContext.getReaderContext().error("At least one type of header must be specified when using <headers>",
|
||||
element);
|
||||
}
|
||||
builder.addConstructorArgValue(headerWriters);
|
||||
return builder.getBeanDefinition();
|
||||
}
|
||||
|
||||
@@ -83,12 +87,12 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
for (Element headerElt : headerElts) {
|
||||
String headerFactoryRef = headerElt.getAttribute(ATT_REF);
|
||||
if (StringUtils.hasText(headerFactoryRef)) {
|
||||
headerFactories.add(new RuntimeBeanReference(headerFactoryRef));
|
||||
headerWriters.add(new RuntimeBeanReference(headerFactoryRef));
|
||||
} else {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(StaticHeadersWriter.class);
|
||||
builder.addConstructorArgValue(headerElt.getAttribute(ATT_NAME));
|
||||
builder.addConstructorArgValue(headerElt.getAttribute(ATT_VALUE));
|
||||
headerFactories.add(builder.getBeanDefinition());
|
||||
headerWriters.add(builder.getBeanDefinition());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,17 +103,16 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(StaticHeadersWriter.class);
|
||||
builder.addConstructorArgValue(CONTENT_TYPE_OPTIONS_HEADER);
|
||||
builder.addConstructorArgValue("nosniff");
|
||||
headerFactories.add(builder.getBeanDefinition());
|
||||
headerWriters.add(builder.getBeanDefinition());
|
||||
}
|
||||
}
|
||||
|
||||
private void parseFrameOptionsElement(Element element, ParserContext parserContext) {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(FrameOptionsHeaderWriter.class);
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(XFrameOptionsHeaderWriter.class);
|
||||
|
||||
Element frameElt = DomUtils.getChildElementByTagName(element, FRAME_OPTIONS_ELEMENT);
|
||||
if (frameElt != null) {
|
||||
String header = getAttribute(frameElt, ATT_POLICY, "DENY");
|
||||
builder.addConstructorArgValue(header);
|
||||
if (ALLOW_FROM.equals(header) ) {
|
||||
String strategyRef = getAttribute(frameElt, ATT_REF, null);
|
||||
String strategy = getAttribute(frameElt, ATT_STRATEGY, null);
|
||||
@@ -133,7 +136,7 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
"'value' attribute doesn't represent a valid URI.", frameElt, e);
|
||||
}
|
||||
} else {
|
||||
RequestParameterAllowFromStrategy allowFromStrategy = null;
|
||||
AbstractRequestParameterAllowFromStrategy allowFromStrategy = null;
|
||||
if ("whitelist".equals(strategy)) {
|
||||
allowFromStrategy = new WhiteListedAllowFromStrategy(
|
||||
StringUtils.commaDelimitedListToSet(value));
|
||||
@@ -146,15 +149,17 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
}
|
||||
String fromParameter = getAttribute(frameElt, ATT_FROM_PARAMETER, "from");
|
||||
allowFromStrategy.setParameterName(fromParameter);
|
||||
allowFromStrategy.setAllowFromParameterName(fromParameter);
|
||||
builder.addConstructorArgValue(allowFromStrategy);
|
||||
}
|
||||
} else {
|
||||
parserContext.getReaderContext().error("One of 'strategy' and 'strategy-ref' must be set.",
|
||||
frameElt);
|
||||
}
|
||||
} else {
|
||||
builder.addConstructorArgValue(header);
|
||||
}
|
||||
headerFactories.add(builder.getBeanDefinition());
|
||||
headerWriters.add(builder.getBeanDefinition());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +178,7 @@ public class HeadersBeanDefinitionParser implements BeanDefinitionParser {
|
||||
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(StaticHeadersWriter.class);
|
||||
builder.addConstructorArgValue(XSS_PROTECTION_HEADER);
|
||||
builder.addConstructorArgValue(value);
|
||||
headerFactories.add(builder.getBeanDefinition());
|
||||
headerWriters.add(builder.getBeanDefinition());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user