Spring security SpringSecurity3指定多个拦截url访问角色

Spring security SpringSecurity3指定多个拦截url访问角色,spring-security,url-interception,Spring Security,Url Interception,我正在尝试使用JDBCAuth设置Spring3安全性。除了我尝试为截取url指定多个访问角色外,一切都正常。例如,我希望任何角色为ROLE_USER和ROLE_ADMIN的人都能够访问所有页面,我在spring配置文件中使用以下行- 但是,这会引发以下错误- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.

我正在尝试使用JDBCAuth设置Spring3安全性。除了我尝试为截取url指定多个访问角色外,一切都正常。例如,我希望任何角色为ROLE_USER和ROLE_ADMIN的人都能够访问所有页面,我在spring配置文件中使用以下行-


但是,这会引发以下错误-

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Unsupported configuration attributes: [ ROLE_ADMIN]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1401)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:558)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:852)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:422)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.IllegalArgumentException: Unsupported configuration attributes: [ ROLE_ADMIN]
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.afterPropertiesSet(AbstractSecurityInterceptor.java:154)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398)
    ... 27 more
如果指定只有一个角色可以访问任何url,则可以(对任一角色都可以)。改变我指定角色的顺序也没有什么区别。这就好像SpringSecurity3中发生了一些变化,现在无法处理指定的多个访问角色

我以前使用SpringSecurity2成功地实现了这一点,并且使用了几乎相同的配置。有什么想法吗

下面列出了我的安全配置文件-


我决定降级到SpringSecurity2.0.5,而不做任何更改,以检查这是否是3中的一个bug,瞧,它是

我想我在这里也发现了一个相关的开放bug-


解决方案-如果要使用此功能,请使用2.0.5。

我也有同样的问题,但使用表达式来解决此问题:

你应该嵌入

使用expressions=“true”
在现有配置中。因此:


变成


然后:



我不确定这个问题,实际上我目前正在我的项目中使用它,没有发现任何问题。尝试删除“,”后面的空格,我的意思是尝试使用ROLE\u USER,ROLE\u ADMIN

我遇到了同样的问题,找到了答案。
使用该行授予具有两个角色的用户访问权限:


如果要授予具有所列角色之一的用户访问权限,请使用:


另外,您需要添加在security*.xml中使用SpEL的功能,将
use expressions=“true”
添加到
标记。

我在尝试从Spring 3.x迁移到4.x时遇到了同样的问题。最后,我发现在Spring4.x中,“http”标记的参数“use expressions”在默认情况下变成了“true”,而不是false(就像在旧版本中一样)


顺便说一句,这个问题现在已经很老了,但我在谷歌找到了这个问题。所以其他人也可以找到它,而这些信息可能会很有用。

Teja你说得对,它不能处理逗号后的空格。没有空格也可以正常工作。错误消息表明这确实是问题所在:“不支持的配置属性:[ROLE\u ADMIN]”