时间:2021-05-20
本文介绍了Spring Security 控制授权的方法,分享给大家,具体如下:
使用授权方法进行授权配置
每一个 Spring Security 控制授权表达式(以下简称为表达式)实际上都在在 API 中对应一个授权方法,该方法是请求的 URL 权限配置时的处理方法。例如:
@Overrideprotected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers(HttpMethod.DELETE, "/user/*").hasRole("ADMIN") .antMatchers("/index").permitAll() .antMatchers("/pay").hasAnyRole("WE_CHAT_PAY", "ALI_PAY") .antMatchers("/debug").hasIpAddress("192.168.1.0/24");}使用授权表达式给多权限要求的请求授权
那么,何时需要用到表达式进行授权处理呢?一个安全应用的权限要求往往是复杂多样的,比如,项目的调试请求希望访问者既要拥有管理员权限又必须是通过公司内部局域网内部访问。而这样的需求下,仅仅通过Security API 提供的方法是无法满足的,因为这些授权方法是无法连续调用的。
此时就可以使用授权表达式解决:
@Overrideprotected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/debug") .access("hasRole('ADMIN') and hasIpAddress('192.168.1.0/24')");}授权表达式举例说明
表达式 说明 permitAll 永远返回 true denyAll 永远返回 false anonyous 当前用户若是匿名用户返回 true rememberMe 当前用户若是 rememberMe 用户返回 true authenticated 当前用户若不是匿名(已认证)用户返回 true fullAuthenticated 当前用户若既不是匿名用户又不是 rememberMe 用户时返回 true hasRole(role) 当前用户权限集合中若拥有指定的 role 角色权限(匹配时会在你所指定的权限前加'ROLE_',即判断是否有“ROLE_role”权限)时返回 true hasAnyRole(role1, role2, ...) 当前用户权限集合中若拥有任意一个角色权限时返回 true hasAuthority(authority) 当前用户权限集合中若具有 authority 权限(匹配是否有“authority”权限)时返回 true hasAnyAuthority(authority) 当前用户权限集合中若拥有任意一个权限时返回 true hasIpAddress("192.168.1.0/24") 发送请求的IP匹配时fanhui true
基于角色的访问控制 RBAC(Role-Based Access Control)
或许你会认为上述方式已能满足绝大多数应用安全授权管理。但事实上的企业级应用的授权往往是基于数据库数据动态变化的,若是使用上述方式进行字符串拼接,不仅对于开发者极不友好(每一次人人员变动都意味着需要改代码,显然不合理),而且应用的性能也会随之降低。那么,如何解决呢?
数据模型
通用的 RBAC 数据模型, 一般需要五张表(三张实体表,两张关系表)。三张实体表包括用户表、角色表、资源表。两张关系表包括。其之间关系如下图:
RBAC数据模型
用户表
任何一个用户都必须要有用户表,当公司发生人员变动时,由业务人员(如人力资源)对该数据表进行增删记录。
角色表
公司有哪些身份的人,例如总裁、副总裁、部门经理等,有业务人员根据公司的具体情况对该表数据进行操作。
资源表
存储需要进行权限控制的资源,由于我们进行控制授权时实际上是基于 URL 的,但业务人员非按 URL 组织数据条目,而是以视图界面的形式进行曹操作。所以在这张表中存储的是呈现给业务人员的菜单、按钮及其所进行权限控制的 URL 。
用户—角色关系表
用户表与角色表(用户 id 与角色id )之间是一个多对多的关系。一个用户可以是多个角色(一个用户既可以是部门经理又可以是某个管理员),而一个角色往往对应多个用户。
角色—资源关系表
角色表与资源表()也是一个多对多的关系。一种角色可以访问多个资源(按钮或菜单等),一个资源也可以被多个角色访问。
spring security 还支持自定义表达式来完成这项工作,就像这样
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这里使用的是spring-security和原生的jasigcas包来进行整合,为什么没有直接使用spring提供的spring-security-cas,后面
spring-security里自带了oauth2,正好YIIU里也用到了spring-security做权限部分,那为何不直接集成上第三方登录呢?然后我开始了
一、Security简介1、基础概念SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一
在本教程中,我们将研究标准Spring框架和SpringBoot之间的区别。我们将重点讨论Spring的模块,如MVC和Security,在核心Spring中使
情景描述一个聚合项目spring-security-tutorial,其中包括4个module,pom如下所示: