0

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

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

/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/...

这样做的正确方法是什么?有人可以给我一个例子吗?

4

1 回答 1

2

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

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

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

获取当前用户相关信息。

于 2013-01-14T02:59:58.070 回答