我有这样的数据库:

Users <-> Roles -> Permissions


在Spring中,我以spring security身份登录-我不检查用户具有什么角色。每个人都应该登录。

<authentication-manager alias="authenticationManager">
    <authentication-provider>
       <password-encoder  hash="bcrypt"/>
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="select NAME, PASSWORD, 1 as enabled from USERS
                                     where NAME=?"
            authorities-by-username-query="SELECT * FROM USERS u JOIN USERS_MTM_ROLES uur
                                            ON u.ID=uur.ROLE_ID join USER_ROLES ur
                                            on  ur.id=uur.role_id  where NAME=?" />
    </authentication-provider>




<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/admin**" />
    <form-login login-page="/login" default-target-url="/admin"
        authentication-failure-url="/login?error" username-parameter="NAME"
        password-parameter="PASSWORD"  />
    <logout logout-success-url="/login?logout" />
</http>


好的,一切都很好!

但是知道,我想使用@Secure或@Preauthorize批注,以检查用户是否具有权限。但是spring如何知道用户是否具有具体权限?权限应该写在某个地方吗?

换句话说,我希望我的控制器受到保护。如果用户有具体的权限,则他/她应有权访问控制器,否则用户则不应。我该怎么办?

最佳答案

Spring Security提供了用于控制器授权的注释。这是一个例子:
http://www.mkyong.com/spring-security/spring-security-hello-world-annotation-example/

另外,我强烈建议您使用Shiro而不是Spring Security。在实践中,我意识到配置Spring Security比其价值要复杂得多。请参考http://shiro.apache.org

09-10 02:28
查看更多