SpringSecurity注解的使用

@Secured

判断用户具有某个角色,只有具有相应角色才可以调用方法

  1. 开启注解功能

    使用注解先要开启注解功能!可以在启动类上,也可以在配置类上添加

    @EnableGlobalMethodSecurity(securedEnabled = true)
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
  2. 在控制器方法上添加注解

    @GetMapping("update")
    @Security({"ROLE_sale", "ROLE_manager"})
    public String update(){
    

    判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_",因为在源码中SpringSecurity对hasRole方法做了如下处理

    image-20210205161848163

@PreAuthorize

在进入方法前进行权限验证

  1. 开启方法前后验证注解

    @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
    

    也就是 prePostEnable = true

  2. 在控制器方法上面添加注解

    @GetMapping
    @PreAuthorize("hasAnyAuthority('admin')")
    public String update(){
    

@PostAuthorize

在进入方法后进行权限验证

  1. 开启验证注解,同上

  2. 在控制器方法上面添加注解

    @GetMapping
    @PostAuthorize("hasAnyAuthority('admin')")
    public String update(){
    

@PreFilter

进入控制器之前对数据进行过滤

@GetMapping
@PostAuthorize("hasAnyAuthority('admin')")
@PreFilter(value = "filterObject.id%2==0")
public String update(@RequestBody List<UserInfo> list){
    list.forEach(t -> {
		System.out.println(t.getId() + ":" + t.getName());
    })

上述注解的作用就是,如果 UserInfo 的 id 能被 2 整除,就传递 list 中

@PostFilter

@GetMapping
@PostAuthorize("hasAnyAuthority('admin')")
@PreFilter(value = "filterObject.username=='admin'")
public String update(@RequestBody List<UserInfo> list){ 
    ArrayList<User> list = new ArrayList<>();
    list.add(new User(1, "admin"));
	list.add(new User(1, "user"));
    return list
}

上述注解的作用就是,留下 list 中 username 为 admin 的对象

作者: 贺墨于
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/hemou/p/14379062.html