• 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

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

  • 相关阅读:
    Python爬虫
    使用dos安装mysql数据库和java开发工具
    i.MX 6ULL 驱动开发 二:搭建 KGDB 调试 linux 内核和驱动环境
    贪心算法(算法竞赛、蓝桥杯)--排队接水问题
    Java 基础常见知识点&面试题总结(下),2022 最新版!
    AI都那么发达了,我还有必要学习编程吗
    基于java的毕业设计选题双选系统
    【无标题】
    Eclipse+tomcat+MySQL搭建JavaWeb开发环境
    猿创征文 | Shell编程【上篇】
  • 原文地址:https://blog.csdn.net/Kk_Chosen1/article/details/126444180