Java Spring MVC角色和管理员权限
我是SpringMVC的新手,在我现有的项目中,有一个管理员,他们有权更新数据,但现在我需要创建两个新管理员,admin1和admin2 只有在登录时才能看到受限页面,如: 当管理员登录时,他们可以在菜单栏中看到添加数据、更新数据、发布消息页面。 但在Admin1的情况下,只能在菜单栏中看到Post Measage页面 所以,请指导我如何在SpringMVC中完成这项任务Java Spring MVC角色和管理员权限,java,spring,spring-mvc,web-applications,user-roles,Java,Spring,Spring Mvc,Web Applications,User Roles,我是SpringMVC的新手,在我现有的项目中,有一个管理员,他们有权更新数据,但现在我需要创建两个新管理员,admin1和admin2 只有在登录时才能看到受限页面,如: 当管理员登录时,他们可以在菜单栏中看到添加数据、更新数据、发布消息页面。 但在Admin1的情况下,只能在菜单栏中看到Post Measage页面 所以,请指导我如何在SpringMVC中完成这项任务 谢谢。 你必须考虑使用Spring Security来实现这一点。请检查下面的 <http auto-config="
谢谢。 你必须考虑使用Spring Security来实现这一点。请检查下面的
<http auto-config="true">
<intercept-url pattern="/admin*" access="ROLE_ADMIN" />
</http>
这意味着,只有具有“角色\管理员”权限的用户才能访问URI/ADMIN*。如果非授权用户尝试访问它,将显示“http 403访问被拒绝页面”
您必须配置URL和允许的访问权限
在的简单示例中,您当然需要两个角色那你也可以 -在每个位置检查角色
Admin1或Admin2
或Admin1
。
-但您已经提到了一种更好的方法:将角色和权限分开:将角色分配给用户,将权限分配给角色,这样用户就可以通过角色获得权限。现在,您只需检查权限即可访问函数
Spring已经内置了一个功能,但我觉得它很笨拙,因为它需要每个选民都理解它。所以我实现了,这非常简单,并且只基于Spring安全角色。因此,只需更改角色提供程序,就可以了 您需要在Spring security中创建两个具有不同访问权限的角色
<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>
我有一个类似的用例,管理员可能希望创建新角色,并为这些角色任意分配权限 如果我授权用户在其授权权限中存在
角色*
,则每次有人添加新角色或该角色的业务需求发生变化时,代码都需要更改
像@Ralph一样,我创建了一个库,将基于角色的映射权限注入权限
,因为我发现分层角色实现缺乏
在当前安全会话中注入身份验证对象时,它将具有原始角色/授予的权限。
例如,您可以在UserDetailsService或JWT身份验证转换器中提供映射权限
调用PermissionProvider以获取用户所属的每个角色的有效权限。不同的权限列表作为授权项添加到身份验证对象中
然后我可以在配置中使用权限级别授权,角色到权限的映射可以在运行时更改
概念-
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() {
...
}