【问题标题】:spring security 3 - restrict role access to actual userspring security 3 - 限制对实际用户的角色访问
【发布时间】:2012-12-27 15:39:44
【问题描述】:

在我的 Web 应用程序中,我希望用户(角色 USER)拥有他们只能看到自己的私人页面。我还想要一个超级管理员(角色 ADMIN),它可以查看所有用户的所有私人页面。

所以我按照以下方式对 url 进行建模:

/user/{userId}/...

现在除了 ADMIN 之外,只有具有用户 ID 的 USER 才能调用此页面。用户可以动态添加,用户ID为生成的序列号。

我开始这样建模:

<http pattern="/user/**" use-expressions="true"  >
    ...
    <intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />
    ... 
</http>

但是这样做会例如允许用户 ID 为 2 的 USER 调用 /user/1/...

这样做的正确方法是什么?谁能举个例子?

【问题讨论】:

标签: spring spring-security roles


【解决方案1】:

/user/{userId}/ 中的 userId 仅在用户具有 ADMIN 角色时才有意义。对于其他用户,只需忽略该参数并使用

UserDetails userDetails =
      (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

if('ROLE_ADMIN' in userDetails.getAuthorities() ){
    //get user indentified by userId
}
else{
   //get current user 
}

获取当前用户相关信息。

【讨论】:

  • 好主意,我还没想过。但是,这表明我必须在业务层确定用户拥有哪些角色,如果可能的话,我希望我的业务层不参与此操作。
  • @flo 我不知道您将业务逻辑放在哪里,但是您可以在加载用户信息的同一位置使用userDetails.getAuthorities() 验证用户权限。我更新了我的代码以显示这一点。
猜你喜欢
  • 2018-11-28
  • 2013-08-26
  • 2023-04-08
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 2013-12-08
  • 2011-01-07
相关资源
最近更新 更多