【问题标题】:Spring MVC annotation and security configurationSpring MVC 注解和安全配置
【发布时间】:2014-07-11 01:20:08
【问题描述】:

有 2 个角色 1) ROLE_USER1 2)ROLE_USER2

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

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

我希望 ROLE_USER1 只能访问“user/create”,所以在这种情况下,我必须在 secruity.xml 中为 ROLE_USER1 角色添加 URI“user/create”

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

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

对于超级管理员 URL 将包含 /SuperAdmin

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

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

我想用 Spring.security.xml 中的最少条目来保护 url

问候

【问题讨论】:

  • 你为什么需要 2 个网址?! url admin/user/create/ 或者更好的 /user/create 应该受到 Spring Security 的保护,并且只允许访问任一角色。您不想为了安全而添加一大堆 URI。
  • Yes.. 示例我创建了一个 UserCONtroller,其中写入了与用户相关的所有操作。因此,如果我只想管理员访问查看用户,那么我必须在安全文件中添加所有 URI。我不想在安全文件中添加每个 URI
  • 我不明白你想要什么,你不想要多个网址,因为这可以说是一个维护地狱。只需保护 Spring Security 中的 /admin/user/create 即可。见docs.spring.io/spring-security/site/docs/current/reference/…
  • 或者在方法@PreAuthorize上使用注解来应用安全性。
  • 嗨@M.Deinum 感谢您抽出宝贵的时间。我已经编辑了原始问题,请看一下。希望这次我能正确解释

标签: spring spring-mvc spring-security


【解决方案1】:

我认为您不应该为管理员和超级管理员创建新的控制器。

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

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

您只需要添加管理员和超级管理员角色,如下所示。

    <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();

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 2016-10-13
    • 2018-02-13
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多