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 的对象

posted @ 2021-02-05 17:44  贺墨于  阅读(735)  评论(0编辑  收藏  举报