2014-05-22 127 views
0

有2个角色 1)ROLE_USER1 2)ROLE_USER2Spring MVC的注解和安全配置

我不希望添加的每URI在弹簧security.xml文件比如我有管理用户模块,在那里我可以创建,更新,删除和读取用户我有一个名为用户控制器的控制器。在控制器映射是

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

我想ROLE_USER1只获得“用户/制造”所以在这种情况下,我必须在secruity.xml

而且ROLE_USER2添加URI“用户/制造” ROLE_USER1角色只能访问“用户/列表”和“用户/删除”,在这种情况下,我必须在security.xml中为ROLE_USER2添加2个URI

我希望如果发生这种情况,我总是会给URL中的/ admin该管理员角色可以访问

并且对于SuperAdmin URL wi会包含/超级管理员

而我只需要给/管理/ **和/超级管理员/ **在弹簧security.xml文件

但要实现上面的场景我必须添加多个映射在控制器单一行动。如果我添加多个动作,那么我有Jsp动作问题。即有可能是因为存在“/管理/用户/创建”或“/超级管理员/用户/创建”

我想保护的URL以最小的条目Spring.security.xml

问候

+0

为什么你需要2个网址? admin/user/create /或者甚至更好的'/ user/create'应该受到Spring Security的保护,并且只允许任一角色的访问。您不想为了安全性而添加大量的URI。 –

+0

是的..例子我创建了一个用户控制器,其中所有与用户相关的操作都被写入。 因此,如果我想管理员只能访问视图用户,那么我必须在安全文件中添加所有URI。我不想在安全文件中添加每个URI –

+0

我不明白你想要什么,你不想要多个URL,因为这变成了一个保持地狱可以这么说。在Spring Security中保护'/ admin/user/create'。请参阅http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#authorize-requests –

回答

0

我不要认为你应该为admin和superadmin创建一个新的控制器。

相反,您应该只将角色添加到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();