Spring MVC注释和安全配置

时间:2014-05-22 06:36:27

标签: spring spring-mvc spring-security

有2个角色 1)ROLE_USER1 2)ROLE_USER2

我不想在spring-security.xml中添加每个URI示例我有Manage User模块,我可以在哪里创建,更新,删除和读取用户我有一个名为user controller的控制器。该控制器中的映射是

@RequestMapping (value="user/create")
@RequestMapping (value="user/list")
@RequestMapping (value="user/update")
@RequestMapping (value="user/delete")

我希望ROLE_USER1只能访问" user / create"所以在这种情况下我必须添加URI" user / create"对于secruity.xml中的ROLE_USER1角色

并且ROLE_USER2只能访问" user / list"和" user / delete",在这种情况下,我必须在security.xml中为ROLE_USER2添加2个URI

我想如果这可能以某种方式发生,我将始终在管理员角色可以访问的URL中提供/ admin

对于SuperAdmin,URL将包含/ SuperAdmin

我只需要在spring-security.xml中提供/ Admin / **和/ superAdmin / **

但是要实现上述场景,我必须在控制器中添加多个映射以执行单个操作。如果我添加多个动作,那么我有Jsp动作问题。即可能有" / admin / user / create"或" / superAdmin / user / create"

我希望使用Spring.security.xml

中的最少条目来保护网址

此致

1 个答案:

答案 0 :(得分:0)

我认为你不应该为admin和superadmin创建一个新的Controller。

相反,您应该只将角色添加到security.xml中的URL。例如,如果您当前的security.xml配置如下所示

    <intercept-url pattern="/user/create" access="hasAnyRole('ROLE_USER1')" />     
    <intercept-url pattern="/user/delete" access="hasAnyRole('ROLE_USER2')" />

您只需添加admin和superadmin角色,如下所示。

    <intercept-url pattern="/user/create" access="hasAnyRole('ROLE_USER1', 'SuperAdmin', 'Admin')" />      
    <intercept-url pattern="/user/delete" access="hasAnyRole('ROLE_USER2', 'SuperAdmin', 'Admin')" />

在Java代码中,如果您有不同角色的特殊逻辑,则可以按如下方式访问当前角色并切换逻辑。

SecurityContextHolder.getContext().getAuthentication().getAuthorities();