SpringSecurity常见注解的使用

@Secured

方法级别的权限认证,只有被该注解指定的角色才能访问该方法

使用该注解需要开启注解功能,在配置类或者启动类上添加

@EnableGlobalMethodSecurity(securedEnabled=true)

 在controller方法上添加@Secured注解

    @GetMapping("update")
    @Secured({"ROLE_salesman","ROLE_manager"}) //设置只有这两种角色才能访问这个方法
    public String update() {
        return "hello, update";
    }

此时如果不是这两个角色其中之一访问请求将被拒绝

@PreAuthorize 

进入方法前的权限验证,同时也支持表达式的访问控制

要想使用该注解需要在@EnableGlobalMethodSecurity注解上添加 prePostEnabled = true 属性

在controller中的方法上添加此注解

    @GetMapping("update")
//    @Secured({"ROLE_salesman","ROLE_manager"}) //设置只有这两种角色才能访问这个方法
    @PreAuthorize("hasAuthority('manager')")
    public String update() {
        return "hello, update";
    }

此时如果不具备manager权限的访问将会被拒绝

如果要求同时满足多个条件的可以这样编码

    @GetMapping("update")
//    @Secured({"ROLE_salesman","ROLE_manager"}) //设置只有这两种角色才能访问这个方法
    @PreAuthorize("hasAuthority('manager') and hasRole('salesman')") //只有同时满足是salesman角色并且具有manager权限的才能访问该方法
    public String update() {
        return "hello, update";
    }

如果不能同时满足这两个条件,那么这个方法将不能访问

@PostAuthorize

同上面的注解一样,要开启此注解的功能需要在 @EnableGlobalMethodSecurity注解上添加 prePostEnabled = true 属性

@PostAuthorize注解的使用频率并不高,在方法执行之后再进行权限验证,适合验证带有返回值的权限。

在controller中的方法上添加上该注解

    @PostAuthorize("hasAuthority('admin')") //方法执行之后进行权限验证
    @GetMapping("testPostAu")
    public String testPostAu() {
        System.out.println("hello, PostAuthorize");
        return "hello, PostAuthorize";
    }

此时来一个没有admin权限的访问请求该方法,将会被拒绝访问,但是idea控制台会执行输出语句输出hello, PostAuthorize,这说明该注解是在方法执行之后进行的权限验证

 @PostFilter

在权限验证过后对数据进行过滤

    @GetMapping("getAll")
    @PreAuthorize("hasRole('salesman')")
    @PostFilter("filterObject.username == 'admin1'") //权限验证之后对数据进行过滤 留下用户名是 admin1 的数据
    public List<Users> getAllUser(){
        ArrayList<Users> list = new ArrayList<>();
        list.add(new Users(1,"admin1","6666"));
        list.add(new Users(2,"admin2","888"));
        return list;
    }

 访问该请求可发现只返回了admin1,admin2并没有显示出来而是被过滤掉了

 

 @PreFilter

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值