首页 > 其他分享 >Spring Security鉴权注解

Spring Security鉴权注解

时间:2023-11-30 19:04:15浏览次数:35  
标签:EL 拦截器 Spring assignee 注解 Security 鉴权 表达式


一、JSR250规范注解

需要通过以下方式来开启JSR250注解的识别

@EnableMethodSecurity(jsr250Enabled = true)  //默认为false

以下的注解都在jakarta.annotation.security包下

  • RolesAllowed:允许指定的角色访问
  • DenyAll:拒绝所有的访问
  • PermitAll:放开所有的访问

这几个注解都是通过AuthorizationManagerBeforeMethodInterceptor拦截器来进行识别。

使用示例:

@RolesAllowed("admin")  //admin角色,在内部判断时会先自动加上"ROLE_"
public void read(){}

@PermitAll
public void allowAll(){}

@DenyAll
public void notAllow(){}


二、Secured注解

需要通过以下方式来开启Secured注解的识别

@EnableMethodSecurity(securedEnabled = true) //默认为false

@Secured注解在org.springframework.security.access.annotation包下,根据注解上配置的值与认证后的Authentication中保存的GrantedAuthority直接对比

这个注解都是通过AuthorizationManagerBeforeMethodInterceptor拦截器来进行识别的。

使用示例:

//该注解上的值与认证后的Authentication中保存的GrantedAuthority直接比较
@Secured({ "ROLE_USER", "P001" })
public void update(){}

三、Pre/Post注解

需要通过以下方式来开启注解的识别

@EnableMethodSecurity(prePostEnabled = true) //默认就为

以下几个都在org.springframework.security.access.prepost包下

  • PreAuthorize:方法被调用前进行表达式的执行,注解的值为Spring-EL表达式,表达式返回true则允许执行。该注解对应的拦截器是:AuthorizationManagerBeforeMethodInterceptor
  • PostAuthorize:方法调用后进行表达式的执行,注解的值为Spring-EL表达式,使用的拦截器为:AuthorizationManagerAfterMethodInterceptor
  • PreFilter:定义了一个Spring-EL表达式的规则,用于筛选方法的返回列表。其逻辑是将该规则应用于列表中的每个元素。如果计算值为 true,则该元素将保留在列表中。否则,该元素将被删除。对应的拦截器为:PreFilterAuthorizationMethodInterceptor
  • PostFilter:对方法的数据参数筛选将应用于作为输入参数传递给带注释的方法的列表。使用的拦截器是:PostFilterAuthorizationMethodInterceptor]

以上的注解都是使用Spring-EL表达式,通过对Spring-EL表达式的计算来保护对方法的访问,表达式返回ture(表示满足条件)或false。

使用示例:

//执行方法后对其进行验证(并可能更改结果)
@PostAuthorize("returnObject.username == authentication.principal.nickName")
User findByUserName(String username);

//方法执行前进行权限检查
//只有具备ROLE_USER角色和ROLE_ADMIN角色的用户才能访问
@PreAuthorize("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
void update(){}

//根据参数集合的每个Task对象的assignee属性进行过滤
//保留assignee的值与当前登录人名称相同的数据
@PreFilter("filterObject.assignee == authentication.name")
Iterable<Task> save(Iterable<Task> entities) {}

//根据返回结果列表中每个task对象的assignee属性进行过滤
//保留assignee的值与当前登录人名称相同的数据
@PostFilter("filterObject.assignee == authentication.name")
List<Task> findAll() {}


关于Spring-EL表达可参考:https://zhuanlan.zhihu.com/p/174786047


标签:EL,拦截器,Spring,assignee,注解,Security,鉴权,表达式
From: https://blog.51cto.com/dengshuangfu/8633362

相关文章

  • Spring Boot 控制台日志打印颜色表
    //ResetpublicstaticfinalStringRESET="\033[0m";//TextReset//RegularColorspublicstaticfinalStringWHITE="\033[0;30m";//WHITEpublicstaticfinalStringRED="\033[0;31m";//......
  • 如何在Spring Boot中不启动Web Server
    XYHS:用方法4,spring.main.web-application-type=none,实测可行如何在SpringBoot中不启动WebServer1.介绍SpringBoot是一个用于为各种应用快速创建新的Java应用程序的优秀框架。最流行的用途之一是作为web服务器。但是,SpringBoot有许多不需要web服务器的场景:控制台应用程序、作......
  • SpringBoot Resolved [org.springframework.web.multipart.support.MissingServletRe
    SpringBootResolved[org.springframework.web.multipart.support.MissingServletRequestPartException:Requiredrequestpart'file'isnotpresent]IDEA报错信息这个错误主要主要是指后端通过@RequestParam("file")注解标注的MultipartFile参数并没有获取到文件参数为n......
  • SpringBoot集成hutool配置定时任务,支持crontab和quartz表达式
    1、pom.xml引入hutool<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>修改version</version></dependency>2、Java文件packagecom.xxx.schedule;importcn.hutool.cron.CronUtil......
  • 【Spring】SpringBoot+RabbitMQ(direct/fanout/topic)の構築方法
     ■POM.xmlの中で、下記の内容を追加<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency>......
  • vulhub中spring的CVE-2018-1273漏洞复现
    ​ 1.影响版本SpringDataCommons1.13-1.13.10(IngallsSR10)SpringDataREST2.6-2.6.10(IngallsSR10)SpringDataCommons2.0to2.0.5(KaySR5)SpringDataREST3.0-3.0.5(KaySR5)2.漏洞原理SpringData是一个用于简化数据库访问,并支持云服务的开源框......
  • Spring Cloud 配置 Nacos
    一,下载Nacos 下载地址:https://github.com/alibaba/nacos/releases 二,启动Nacos安装Nacos的bin目录下,执行:startup.cmd-mstandalone 然后打开上图红框的地址 三,配置服务1配置Nacos创建命名空间(无论本地还是测试服务期,全部注册到Nacos上,通过命名空间可以区分......
  • @Autowired作用在方法上 @autowired注解放在方法上,如果方法没有参数,spring容器会在类
    @Autowired作用在方法上@autowired注解放在方法上,如果方法没有参数,spring容器会在类加载完后执行一次这个方法;如果方法中有参数的话,还会从容器中自动注入这个方法的参数,然后执行一次这个方法。@autowired用于测试的实体类User,并将这个类注入到Spring容器中,为@autowired注解......
  • SpringBoot的配置文件application.yml及加载顺序详解
    SpringBoot配置文件application.yml及加载顺序配置文件分类自定义配置文件配置文件总结Springboot中application.yml、application.properties和bootStrap.yml加载顺序SpringApplication位于项目根目录以jar包发布springboot项目时若application.yml和bootStra......
  • Spring源码学习之Web数据绑定器WebDataBinder
    WebDataBinder1.描述特殊的数据绑定器用于从web请求参数到JavaBean对象的数据绑定。专为web环境,但不依赖于ServletAPI;作为更具体的DataBinder变体的基类,例如ServletRequestDataBinder。2.注意:数据绑定会暴露对象图中不打算被外部客户端访问或修改的部分,从而导致安全问题。因......