Spring Security - @PreAuthorize安全表达式hasRole、hasAuthority区别
hasRole:
角色授权:授权代码,在我们返回的UserDetails的Authority需要加ROLE_前缀,Controller上使用时不要加前缀;
hasAuthority:
权限授权:用户自定义的权限,返回的UserDetails的Authority只要与这里匹配就可以,这里不需要加ROLE_,名称保持一至即可
Spring Security可用表达式对象的基类是SecurityExpressionRoot,其为我们提供了如下在使用Spring EL表达式对URL或方法进行权限控制时通用的内置表达式:
表达式 | 说明 |
permitAll | 永远返回true |
denyAll | 永远返回false |
anonymous | 当前用户是anonymous时返回true |
rememberMe | 当前用户是rememberMe用户时返回true |
authenticated | 当前用户不是anonymous时返回true |
fullAuthenticated | 当前用户既不是anonymous也不是rememberMe用户时返回true |
hasRole(role) | 用户拥有指定的角色权限时返回true |
hasAnyRole([role1,role2]) | 用户拥有任意一个指定的角色权限时返回true |
hasAuthority(authority) | 用户拥有指定的权限时返回true |
hasAnyAuthority([authority1,authority2]) | 用户拥有任意一个指定的权限时返回true |
hasIpAddress('192.168.1.0') | 请求发送的Ip匹配时返回true |
还可以在WebSecurity指定我们自己写的方法控制权限:
.access("@MyRbacService.findAuthority(request,authentication)")//指定我们自己写的方法控制权限
扩展:
@PreAuthorize可以用来控制一个方法是否能够被调用。
@PostAuthorize是在方法调用完成后进行权限检查,它不能控制方法是否能被调用,只能在方法调用完成后检查权限决定是否要抛出
@PreFilter和@PostFilter可以对集合类型的参数或返回值进行过滤。使用@PreFilter和@PostFilter时,Spring Security将移除使对应表达式的结果为false的元素。
@PostFilter("filterObject.id%2==0") public List<User> findAll() {}
参考链接:https://www.baeldung.com/spring-security-expressions
Spring Security中@PreAuthorize、@PostAuthorize、@PreFilter和@PostFilter_起努力的博客-CSDN博客
Spring Security - @PreAuthorize安全表达式hasRole、hasAuthority区别相关推荐
- spring security中Authority、Role的区别
最近在研究spring security时,大概研究了一下Authority.Role之间到底有什么本质的区别. 如果你使用的是hasRole方法来判断你的登录用户是否有权限访问某个接口,那么你初始化 ...
- spring security 方法安全表达式 使用参数 调用bean 自定义校验方法
版本 spring security 5.6.6 使用参数 在鉴权表达式中通过**#参数名**格式引用参数值 可以通过*@P*注解给参数添加别名 import org.springframework. ...
- 理解Spring Security中permitAll()和anonymous()的区别
从 Spring文档: 采用"默认拒绝"通常被认为是良好的安全实践,您可以明确指定允许的内容并禁止其他所有内容.定义未经身份验证的用户可以访问的内容是类似的情况,尤其是对于 Web ...
- html form role,Spring Security中html页面设置hasRole无效的问题
HDU 4349 Xiao Ming's Hope 有这样一个性质:C(n,m)%p=C(p1,q1)*C(p2,q2).......%p,其中pkpk-1...p1,qkqk-1.. ...
- Spring Security构建Rest服务-1401-权限表达式
Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...
- springboot集成spring security实现登录和注销
文章目录 一.导入坐标 二.Users实体类及其数据库表的创建 三.controller,service,mapper层的实现 四.核心–编写配置文件 五.页面的实现 运行结果 一.导入坐标 < ...
- spring security:第一个程序解析
上一篇在一个项目里配置了spring security,这里大致说一些这些配置的作用. pom.xml 文件解析 <!-- spring security --><!-- sprin ...
- Spring Security 4 整合Hibernate 实现持久化登录验证(带源码)
上一篇文章:Spring Security 4 整合Hibernate Bcrypt密码加密(带源码) 原文地址:http://websystique.com/spring-security/spri ...
- spring security源码分析之web包分析
Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案.一般来说,Web 应用的安全性包括 ...
最新文章
- 滴滴信控系统开放试用 鼓励行业人员进行更广泛交通研究
- C++和C#实现剪切板数据交互
- 巴菲特的价值投资的第二版本
- OpenCASCADE:要求
- 如何在SAP Kyma的控制台里扩展新的UI
- go micro java_Java Micro Framework:您无法忽略的新趋势
- 1005 继续(3n+1)猜想(25 分)
- 9.27 csp-s模拟测试53 u+v+w
- [swift] LeetCode 338. Counting Bits
- cmake之TEST与TEST_F用法(五)
- Linux管理员权限失败su Authentication failure
- LINUX使用sed,字串中包含特殊字符怎么办?
- cc2430的ram和rom的划分
- Matlab/simulink 2018a利用 powergui 进行FFT分析(傅里叶分析谐波)
- 计算机网络cpu规格,国产CPU路漫漫 历数龙芯各型号技术指标
- 安装python时无法访问筛选器,如何使用Python筛选器功能(详解)
- 谈我们的团队文化建设
- Android Automotive车载嵌入式系统
- VMware vSphere核心组件
- opencv 直方图比较
热门文章
- C#实现发送钉钉工作通知消息
- Ubuntu 12.04.5安装TL-WN725N 2.0无线网卡驱动
- 游戏浅谈4-部落战争(COC)
- JavaScript(3)-- 数据类型
- arma自回归matlab,基于MATLAB的自回归移动平均模型_ARMA_在股票预测中的应用
- 2017届中兴校招综合面试之软件测试工程师面试经历
- python字符串转整数_如何在Python中将字符串转换为整数
- C# 多线程与高并发处理并且具备暂停、继续、停止功能
- JS中添加元素的方法
- 求两个有序数组的中位数