Spring Security 3 spécifier plusieurs rôles d'accès intercept-url

j'essaie de configurer la sécurité du printemps 3 en utilisant JDBC auth. Tout fonctionne bien à part quand j'essaie de spécifier plusieurs rôles d'accès à une interception d'url. Eg je veux que n'importe qui avec les rôles ROLE_USER et ROLE_ADMIN soit capable d'accéder à toutes les pages, j'utilise la ligne suivante dans mon fichier de configuration de printemps -

<security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" />

Toutefois, cela déclenche l'erreur suivante -

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.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

si spécifiez qu'un seul des rôles peut accéder à n'importe quelle url alors il est très bien (très bien pour l'un ou l'autre rôle.) Modifier l'ordre dans lequel je préciser les rôles ne fait aucune différence. C'est comme si quelque chose avait changé dans la sécurité du printemps 3 qui ne peut plus Gérer les rôles d'accès multiples étant spécifiés.

j'ai déjà réussi à faire fonctionner ce système avec Spring Security 2, et j'utilise pratiquement la même configuration. Des idées?

la sécurité de Mon fichier de config est énuméré ci-dessous

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:security="http://www.springframework.org/schema/security"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/security 
              http://www.springframework.org/schema/security/spring-security-3.0.xsd">  

    <security:http auto-config="true" access-denied-page="/denied.jsp" >    
        <security:form-login
            default-target-url="/app/home"
            always-use-default-target="true" />

        <security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN" />

        <security:logout invalidate-session="true" logout-url="/logout" logout-success-url="" />
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="dataSource"
                users-by-username-query='select "username", "password", "enabled"
                    from users where "username" = ?' 
                authorities-by-username-query='select "username", "authority"                       from user_roles where "username" = ?' />
        </security:authentication-provider>
    </security:authentication-manager>
</beans>
18
demandé sur Betlista 2010-01-20 19:56:56

5 réponses

j'ai eu le même problème mais des expressions d'usage pour obtenir autour de cette question:

Vous devez intégrer

use-expressions="true"

dans votre configuration existante. Donc:

<security:http auto-config="true" access-denied-page="/denied.jsp" >

devient

<security:http auto-config="true" access-denied-page="/denied.jsp" use-expressions="true">

puis:

<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
46
répondu Brice Roncace 2016-01-06 13:49:49

je ne suis pas sûr de ce problème, en fait je l'utilise actuellement dans mon projet et je ne vois pas un problème. essayez de supprimer l'espace après le", " je veux dire essayer D'utiliser ROLE_USER,ROLE_ADMIN

11
répondu Teja Kantamneni 2010-01-20 22:24:10

j'ai eu le même problème quand j'ai essayé de migrer à partir du printemps 3.x à 4.x. Finalement, j'ai trouvé que le paramètre "use-expressions" de la balise "http" est devenu "true" par défaut au printemps 4.x au lieu de false (comme dans les anciennes versions).

7
répondu Roman Proshin 2016-01-22 15:32:08

j'ai eu le même problème et trouvé la réponse ici.

Utiliser cette ligne pour accorder l'accès à l'utilisateur avec les deux rôles:

<security:intercept-url pattern="/**" access="hasRole('ROLE_USER') and hasRole('ROLE_ADMIN')" />

Si vous souhaitez accorder l'accès à l'utilisateur avec la liste des rôles, utilisez:

<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />

vous devez également ajouter la possibilité D'utiliser SpEL dans votre sécurité *.xml, ajouter use-expressions="true"<http> balise.

4
répondu barbarian 2017-05-23 12:25:07

j'ai décidé de descendre à la sécurité de printemps 2.0.5 sans rien changer d'autre pour vérifier si c'était un bug en 3, et lo-and-see il l'était!

je pense que j'ai aussi trouvé une relative bug ouvert ici - https://jira.springsource.org/browse/SEC-1342

Solution-utilisez 2.0.5 si vous voulez utiliser cette fonctionnalité.

-2
répondu user223695 2010-01-20 18:04:43