我是spring mvc的新手,在我现有的项目中,有一个管理员,他们有权更新数据,但现在我需要创建2个新的admin,admin1和admin2 只能在登录时看到有限的页面:
当管理员登录时,他们可以在菜单栏中看到添加数据,更新数据,发布消息页面。 但是在Admin1的情况下,只能在菜单栏中看到Post meassage页面。
所以,请指导我如何在spring mvc中完成这项任务 在此先感谢。
答案 0 :(得分:2)
您必须考虑使用Spring安全性来实现此目的。检查以下内容
<http auto-config="true">
<intercept-url pattern="/admin*" access="ROLE_ADMIN" />
</http>
这意味着,只允许具有“ROLE_ADMIN”权限的用户访问URI / admin *。如果非授权用户尝试访问它,将显示“http 403 access denied page”。
您必须配置网址和允许访问的网址
http://www.mkyong.com/spring-security/spring-security-access-control-example/
的简单示例答案 1 :(得分:0)
你当然需要两个角色。 - 然后你可以
- 检查每个地方的角色Admin1 or Admin2
或Admin1
。
- 但是您已经提到了一种更好的方法:单独的角色和权限:为用户分配角色和角色权限,以便用户通过他的角色获得其权限。现在您只需检查特权以允许访问函数。
Spring已经在14.4 Hierarchical Roles concept构建,但我觉得它很笨拙,因为它需要每个选民都需要理解它。所以我实现了my own solution,这非常简单,仅基于Spring-Security-Roles。因此,只需要更改角色提供程序,但仅此而已。
答案 2 :(得分:0)
您需要在Spring安全性中创建两个具有不同访问权限的角色。
<http auto-config="true">
<intercept-url pattern="/addData" access="ADMIN_2" />
<intercept-url pattern="/updateData" access="ADMIN_2" />
<intercept-url pattern="/postMessage" access="ADMIN_1" />
</http>
答案 3 :(得分:0)
我有一个类似的用例,管理员可能想要创建新角色,并为这些角色任意分配权限。
如果我要授予用户授予的权限中存在ROLE_*
的权限,那么每次有人添加新角色或该角色的业务需求发生变化时,都需要更改代码。
就像@Ralph一样,我创建了一个库来基于Role to Permissions
注入映射的授权,因为我发现缺少层次角色实现...
在当前安全会话中注入Authentication对象时,它将具有原始角色/授予的权限。 您可以在UserDetailsService或JWT Authentication Converter中提供映射权限。
调用PermissionProvider以获得用户所属的每个角色的有效权限。权限的不同列表添加为Authentication对象中的GrantedAuthority项目。
然后,我可以在配置中使用权限级别授权,并且权限映射的角色可以在运行时更改。
概念-
ADMIN1 -> PERM_ADD, PERM_POST
ADMIN2 -> PERM_POST, PERM_UPDATE
实施示例-
@Autowired
RolePermissionsRepository repository;
public void setup1(){
String roleName = "ROLE_ADMIN1";
List<String> permissions = new ArrayList<String>();
permissions.add("PERM_ADD");
permissions.add("PERM_POST");
repository.save(new RolePermissions(roleName, permissions));
}
public void setup2(){
String roleName = "ROLE_ADMIN2";
List<String> permissions = new ArrayList<String>();
permissions.add("PERM_UPDATE");
permissions.add("PERM_POST");
repository.save(new RolePermissions(roleName, permissions));
}
然后使用访问权限代替角色。
<http auto-config="true">
<intercept-url pattern="/addData" access="PERM_ADD" />
<intercept-url pattern="/updateData" access="PERM_UPDATE" />
<intercept-url pattern="/postMessage" access="PERM_POST" />
</http>
或使用授权注释-
@PreAuthorize("hasAuthority('PERM_ADD')")
@RequestMapping("/add")
public String add() {
...
}
有关源代码,请参见此处- https://github.com/savantly-net/spring-role-permissions