Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC角色和管理员权限_Java_Spring_Spring Mvc_Web Applications_User Roles - Fatal编程技术网

Java Spring MVC角色和管理员权限

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="

我是SpringMVC的新手,在我现有的项目中,有一个管理员,他们有权更新数据,但现在我需要创建两个新管理员,admin1和admin2 只有在登录时才能看到受限页面,如:

当管理员登录时,他们可以在菜单栏中看到添加数据、更新数据、发布消息页面。 但在Admin1的情况下,只能在菜单栏中看到Post Measage页面

所以,请指导我如何在SpringMVC中完成这项任务
谢谢。

你必须考虑使用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() {
  ...
}