其他分享
首页 > 其他分享> > springboot中使用Spring Security 之认证授权注解的使用(三)

springboot中使用Spring Security 之认证授权注解的使用(三)

作者:互联网

认证授权注解的使用

判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。 使用注解先要开启注解功能!   第一个注解@Secured 判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。 使用注解先要开启注解功能! @EnableGlobalMethodSecurity(securedEnabled=true)   第一步在启动类上加入 @EnableGlobalMethodSecurity(securedEnabled=true)

 

 

第二步:在控制器也就是Controller中方法上添加注解
@Secured({"ROLE_sale","ROLE_manager"})
角色只有其中一个角色才可以访问
第三步:在Service设置角色才可以
//设置权限不能为空必须有值
List<GrantedAuthority>auths=
AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale");


第二个注解@PreAuthorize 先开启注解功能: 启动类: @EnableGlobalMethodSecurity(prePostEnabled = true) @PreAuthorize:注解适合进入方法前的权限验证, Controller中加@PreAuthorize("hasAnyAuthority('admins')")//加上权限 @PreAuthorize 可以将登录用户的 roles/permissions 参数传到方法中。     第三个注解:@PostAuthorize  先开启注解功能: @EnableGlobalMethodSecurity(prePostEnabled = true) @PostAuthorize 注解使用并不多,在方法执行后再进行权限验证,适合验证带有返回值 的权限. 权限是amdins但是先执行完方法在进行验证

 

第四个注解@PostFilter (方法返回数据进行过滤) @PostFilter :权限验证之后对数据进行过滤 留下用户名是 admin1 的数据 表达式中的 filterObject 引用的是方法返回值 List 中的某一个元素
@GetMapping("getAll")
@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;
}
    第五个注解@PreFilter (传入方法数据进行过滤) @PreFilter: 进入控制器之前对数据进行过滤
@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;
}

标签:EnableGlobalMethodSecurity,springboot,Spring,list,admins,ROLE,注解,Security,权限
来源: https://www.cnblogs.com/yongyuankuaile/p/15404378.html