认证授权注解的使用
判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。 使用注解先要开启注解功能! 第一个注解@Secured 判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。 使用注解先要开启注解功能! @EnableGlobalMethodSecurity(securedEnabled=true) 第一步在启动类上加入 @EnableGlobalMethodSecurity(securedEnabled=true)
第二步:在控制器也就是Controller中方法上添加注解
@Secured({"ROLE_sale","ROLE_manager"})
角色只有其中一个角色才可以访问
第三步:在Service设置角色才可以
//设置权限不能为空必须有值第二个注解@PreAuthorize 先开启注解功能: 启动类: @EnableGlobalMethodSecurity(prePostEnabled = true) @PreAuthorize:注解适合进入方法前的权限验证, Controller中加@PreAuthorize("hasAnyAuthority('admins')")//加上权限 @PreAuthorize 可以将登录用户的 roles/permissions 参数传到方法中。 第三个注解:@PostAuthorize 先开启注解功能: @EnableGlobalMethodSecurity(prePostEnabled = true) @PostAuthorize 注解使用并不多,在方法执行后再进行权限验证,适合验证带有返回值 的权限. 权限是amdins但是先执行完方法在进行验证
List<GrantedAuthority>auths=
AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale");
第四个注解@PostFilter (方法返回数据进行过滤) @PostFilter :权限验证之后对数据进行过滤 留下用户名是 admin1 的数据 表达式中的 filterObject 引用的是方法返回值 List 中的某一个元素
@GetMapping("getAll")第五个注解@PreFilter (传入方法数据进行过滤) @PreFilter: 进入控制器之前对数据进行过滤
@PostAuthorize("hasAnyAuthority('admins')")
@PostFilter("filterObject.username == 'admin1'")
public List<Users> getAllUser(){
ArrayList<Users> list = new ArrayList<>();
list.add(new Users(11,"admin1","6666"));
list.add(new Users(21,"admin2","888"));
System.out.println(list);
return list;
}
@PostMapping("getTestPreFilter")
@PostAuthorize("hasAnyAuthority('admins')")
@PreFilter(value = "filterObject.id%2==0")
public List<Users> getTestPreFilter(@RequestBody List<Users>
list){
list.forEach(t-> {
System.out.println(t.getId()+"\t"+t.getUsername());
});
return list;
}