• SpringSecurity常见注解的使用


    @Secured

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

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

    @EnableGlobalMethodSecurity(securedEnabled=true)

     在controller方法上添加@Secured注解

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

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

    @PreAuthorize 

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

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

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

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

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

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

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

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

    @PostAuthorize

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

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

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

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

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

     @PostFilter

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

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

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

     

     @PreFilter

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

  • 相关阅读:
    javaWeb基于SSM框架开发的社区医疗数据管理系统【项目源码+数据库脚本+报告】
    离散时间系统模型
    Rust实战系列-基本语法
    Qt之图片缩放并解决失真问题
    Mysql知识复习二
    【Qt】QGroundControl入门2:下载、编译、错误处理、运行
    【通信原理】第三章 随机过程——例题
    模拟shell小程序
    信息安全-应用安全-蚂蚁集团软件供应链安全实践
    【Python GUI编程】零基础也能轻松掌握的学习路线与参考资料
  • 原文地址:https://blog.csdn.net/Kk_Chosen1/article/details/126444180