Skip to content

Commit b4d13e7

Browse files
committed
Polish use-authorization-manager
- Use SecurityContextHolderStrategy - Allow empty role prefix - Disallow access-decision-manager-ref and authorization-manager-ref together Issue gh-11305
1 parent 7043ef6 commit b4d13e7

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

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

+17-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class AuthorizationFilterParser implements BeanDefinitionParser {
5050

5151
private static final String ATT_USE_EXPRESSIONS = "use-expressions";
5252

53+
private static final String ATT_ACCESS_DECISION_MANAGER_REF = "access-decision-manager-ref";
54+
5355
private static final String ATT_HTTP_METHOD = "method";
5456

5557
private static final String ATT_PATTERN = "pattern";
@@ -60,17 +62,29 @@ class AuthorizationFilterParser implements BeanDefinitionParser {
6062

6163
private String authorizationManagerRef;
6264

65+
private final BeanMetadataElement securityContextHolderStrategy;
66+
67+
AuthorizationFilterParser(BeanMetadataElement securityContextHolderStrategy) {
68+
this.securityContextHolderStrategy = securityContextHolderStrategy;
69+
}
70+
6371
@Override
6472
public BeanDefinition parse(Element element, ParserContext parserContext) {
6573
if (!isUseExpressions(element)) {
6674
parserContext.getReaderContext().error("AuthorizationManager must be used with `use-expressions=\"true\"",
6775
element);
6876
return null;
6977
}
78+
if (StringUtils.hasText(element.getAttribute(ATT_ACCESS_DECISION_MANAGER_REF))) {
79+
parserContext.getReaderContext().error(
80+
"AuthorizationManager cannot be used in conjunction with `access-decision-manager-ref`", element);
81+
return null;
82+
}
7083
this.authorizationManagerRef = createAuthorizationManager(element, parserContext);
7184
BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder.rootBeanDefinition(AuthorizationFilter.class);
7285
filterBuilder.getRawBeanDefinition().setSource(parserContext.extractSource(element));
7386
BeanDefinition filter = filterBuilder.addConstructorArgReference(this.authorizationManagerRef)
87+
.addPropertyValue("securityContextHolderStrategy", this.securityContextHolderStrategy)
7488
.getBeanDefinition();
7589
String id = element.getAttribute(AbstractBeanDefinitionParser.ID_ATTRIBUTE);
7690
if (StringUtils.hasText(id)) {
@@ -172,7 +186,9 @@ static class DefaultWebSecurityExpressionHandlerBeanFactory
172186

173187
@Override
174188
public DefaultHttpSecurityExpressionHandler getBean() {
175-
this.handler.setDefaultRolePrefix(this.rolePrefix);
189+
if (this.rolePrefix != null) {
190+
this.handler.setDefaultRolePrefix(this.rolePrefix);
191+
}
176192
return this.handler;
177193
}
178194

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ private void createFilterSecurity(BeanReference authManager) {
729729
}
730730

731731
private void createAuthorizationFilter() {
732-
AuthorizationFilterParser authorizationFilterParser = new AuthorizationFilterParser();
732+
AuthorizationFilterParser authorizationFilterParser = new AuthorizationFilterParser(this.holderStrategyRef);
733733
BeanDefinition fsiBean = authorizationFilterParser.parse(this.httpElt, this.pc);
734734
String fsiId = this.pc.getReaderContext().generateBeanName(fsiBean);
735735
this.pc.registerBeanComponent(new BeanComponentDefinition(fsiBean, fsiId));

0 commit comments

Comments
 (0)