2017-04-19 15 views
0

私は春mvcと春のセキュリティプロジェクトに取り組んでいます。私たちのプロジェクトでは、役割と権限はdbに格納され、そこにはさまざまな役割があります。私は以下のコードを書いてアクセスを制限していますが、すべてのURLがそのすべてに役立っています。許可された権限に基づいてユーザーを制限するのを助けてください。春のセキュリティの動的役割

のsecurity.xml上記の例では

<http use-expressions="true" > 
     <intercept-url pattern="/**" access="isAuthenticated()"/> 
     <form-login login-page="/login.jsp" 
        login-processing-url="/login" 
        username-parameter="userName" 
        password-parameter="password" 
        authentication-success-handler-ref="authenticationSuccessHandler" 
        authentication-failure-handler-ref="authenticationFailedHandler" 
        /> 
     <logout logout-url="/logout" invalidate-session="true" logout-success-url="/login.jsp?logout=true"/> 
     <access-denied-handler error-page="/accessDenied"/> 
    </http> 

カスタム認証プロバイダ

List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(); 
    if(userName.equals("admin")){ 
     System.out.println("++++++ admin user +++++"); 
     AUTHORITIES.add(new SimpleGrantedAuthority("/hello")); 
     AUTHORITIES.add(new SimpleGrantedAuthority("/hello1")); 
     AUTHORITIES.add(new SimpleGrantedAuthority("/hello2")); 
    }else{ 
     AUTHORITIES.add(new SimpleGrantedAuthority("/hello")); 
     AUTHORITIES.add(new SimpleGrantedAuthority("/hello1")); 
    } 
    return new UsernamePasswordAuthenticationToken(userName,null,AUTHORITIES); 

は今、すべてのユーザーは、そのURLのみのアクセスするために、すべてのURLにアクセスしますが、plsはそれらを制限するために助けることができます彼に与えられた。

+1

春のセキュリティhttp://docs.spring.io/spring-security/site/docs/4.0.3.RELEASE/reference/htmlsingle/#jc-httpsecurityのドキュメントをお読みください。 – akuma8

+1

'SimpleGrantedAuthority'はURLではなく役割を担う必要があります。これを解決しようとする。私もここで見てみることをお勧めします:http://www.baeldung.com/security-spring – akuma8

答えて

0

注1

<http use-expressions="true" > 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN') or hasRole('ROLE_MYCUSTOMROLE')"/> 
    <form-login login-page="/login.jsp" 
       login-processing-url="/login" 
       username-parameter="userName" 
       password-parameter="password" 
       authentication-success-handler- ref="authenticationSuccessHandler" 
       authentication-failure-handler- ref="authenticationFailedHandler" 
       /> 
    <logout logout-url="/logout" invalidate-session="true" logout-success-url="/login.jsp?logout=true"/> 
    <access-denied-handler error-page="/accessDenied"/> 
</http> 

、これを試してみてください:いくつかの役割もあなたが行うことができ、いくつかの役割を渡す代わりにGrantedAuthorityにURLを渡すの

をURLではない明快さとアクセス属性のためのセキュリティネームスペースを使用する必要がありますUser pojoクラスを作成し、UserDetailsを実装するだけで、多くのボイラープレートコードを避けることができます。

関連する問題