Spring security Spring安全中的多角色定义

Spring security Spring安全中的多角色定义,spring-security,roles,Spring Security,Roles,我在Spring Security 4.2.5中定义了以下角色: 由于以下异常,无法加载和上下文: Caused by: java.lang.IllegalArgumentException: Failed to parse expression "ROLE_SOMETHING_COMPLETELY_DIFFERENT,ROLE_ONE,ROLE_TWO" at org.springframework.security.web.access.expression.ExpressionBase

我在Spring Security 4.2.5中定义了以下角色:


由于以下异常,无法加载和上下文:

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安全文档来看,没有迹象表明
access
标记中的此类参数是不可解析的。相反地,有很多问题

我希望在访问字段中保持相同的语法,因为在项目的访问管理配置中有很多


编辑:使用4.3.15 Spring核心版本。

Spring Security 4.x更改了
http
元素的
使用表达式
属性的默认值。见:

6.2。迁移

http@use-表达式属性的默认值已从false更改为true。这意味着如果未显式配置use expression属性,则需要更新配置。例如,如果使用Spring Security 3.2.x的应用程序包含以下类似配置:

Spring Security 3.2.x示例配置


...
请注意,未提供“使用表达式”属性。如果提供了,那么就不需要做任何事情。 当使用Spring Security 4.x时,需要将配置更新为类似于以下内容:

迁移到SpringSecurity4配置


...
我们显式地提供了use expressions属性。同样,如果已经提供了该属性,则无需执行任何操作


SpringSecurity4.x更改了
http
元素的
use expressions
属性的默认值。见:

6.2。迁移

http@use-表达式属性的默认值已从false更改为true。这意味着如果未显式配置use expression属性,则需要更新配置。例如,如果使用Spring Security 3.2.x的应用程序包含以下类似配置:

Spring Security 3.2.x示例配置


...
请注意,未提供“使用表达式”属性。如果提供了,那么就不需要做任何事情。 当使用Spring Security 4.x时,需要将配置更新为类似于以下内容:

迁移到SpringSecurity4配置


...
我们显式地提供了use expressions属性。同样,如果已经提供了该属性,则无需执行任何操作


我刚刚注意到3.2上的控制流使用
DefaultFilterInvocationSecurityMetadataSource
解析XML,而4.2使用
ExpressionBasedFilterInvocationSecurityMetadataSource
,这证实了您的答案。非常感谢你。这允许我继续。我刚刚注意到3.2上的控制流使用
DefaultFilterInvocationSecurityMetadataSource
解析XML,而4.2使用
ExpressionBasedFilterInvocationSecurityMetadataSource
,这证实了您的答案。非常感谢你。这让我可以继续。
access="hasAnyRole('ROLE_SOMETHING_COMPLETELY_DIFFERENT','ROLE_ONE','ROLE_TWO')