【发布时间】:2018-09-22 15:15:32
【问题描述】:
我在 Spring Security 4.2.5 中有以下角色定义:
<security:http>
<security:intercept-url pattern="/api/doSomething*"
access="ROLE_SOMETHING_COMPLETELY_DIFFERENT,ROLE_ONE,ROLE_TWO"/>
<security:form-login />
<security:logout />
</security:http>
由于以下异常而无法加载上下文:
Caused by: java.lang.IllegalArgumentException: Failed to parse expression "ROLE_SOMETHING_COMPLETELY_DIFFERENT,ROLE_ONE,ROLE_TWO"
at org.springframework.security.web.access.expression.ExpressionBasedFilterInvocationSecurityMetadataSource.processMap(ExpressionBasedFilterInvocationSecurityMetadataSource.java:84)
at org.springframework.security.web.access.expression.ExpressionBasedFilterInvocationSecurityMetadataSource.<init>(ExpressionBasedFilterInvocationSecurityMetadataSource.java:53)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
... 79 more
我正在从 Spring Security 3.2 升级,上面提到的 sn-p 工作得很好。以下方法不起作用:
access="ROLE_SOMETHING_COMPLETELY_DIFFERENT,ROLE_ONE,ROLE_TWO"access="ROLE_SOMETHING_COMPLETELY_DIFFERENT, ROLE_ONE, ROLE_TWO"access='ROLE_SOMETHING_COMPLETELY_DIFFERENT,ROLE_ONE,ROLE_TWO'access='ROLE_SOMETHING_COMPLETELY_DIFFERENT, ROLE_ONE, ROLE_TWO'
尽管如此,这是可行的:
access="hasAnyRole('ROLE_SOMETHING_COMPLETELY_DIFFERENT','ROLE_ONE','ROLE_TWO')
至少从我已经阅读的内容来看,在 Spring Security 文档中没有任何迹象表明 access 标记中的此类参数是不可解析的。反而有很多examples using the exact same syntax。
我想在访问字段中保持相同的语法,因为项目的访问管理配置中有 很多。
编辑:使用 4.3.15 Spring Core 版本。
【问题讨论】:
标签: spring-security roles