Spring Security笔记篇

发布时间 2023-06-09 02:44:04作者: little_lunatic

1.背景

Java 领域老牌的权限管理框架当属 Shiro 了。Shiro 有着众多的优点,例如轻量、简单、易于集成等。

当然 Shiro 也有不足,例如对 OAuth2 支持不够,在 Spring Boot 面前无法充分展示自己的优势等等,特别是随着现在 Spring Boot 和 Spring Cloud 的流行,Spring Security 正在走向舞台舞台中央。 Spring Security 是一个比 Shiro 优秀很多的权限管理框架,但是重量级、配置繁琐、门槛高这些问题一直困扰着 Spring Security 的开发者。直到 Spring Boot 横空出世,这些问题统统都得到缓解。

在 Spring Boot 或者 Spring Cloud 中,如果想选择一个权限管理框架,几乎毫无疑问的选择 Spring Security,Shiro 在这个环境下已经不具备优势了。

Spring Security 的两个主要目标是 “认证(Authentication)” 和 “授权(Authorization)”(访问控制)。

认证:验证身份,如登录,令牌。

授权:授权发生在认证成功之后,会给予用户访问资源的权限。

2.整合 Spring Security

2.1maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

2.2配置@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)

prePostEnabled=true

开启 @PostAuthorize接口调用前权限检查、@PostAuthorize接口调用后权限检查、@PreFilter可以对集合类型的参数进行过滤、@PostFilter可以对方法返回值进行过滤。

securedEnabled=true

开启@Secure配置允许的角色或权限,角色必须有ROLE_前缀

jsr250Enabled=true

开启@RolesAllowed配置允许的角色或权限,角色可以添加ROLE_前缀,也可以不添加ROLE_前缀 、@PermitAll所有用户可访问、DenyAll所有用户不可访问

2.3UserDetails

Spring Security 中有一个核心包里的一个接口,叫做 UserDetails。这个接口十分重要。当系统调用用户这个类的属性验证有没有登录成功时,每个人编写的属性不一样,有些人定义 user,psward,有些定义 username,password。所以 UserDetails 相当于规范,每个人都要去实现他,获取用户名和密码就统一了。

2.4角色继承

dba权限大于admin,admin权限大于user,dba能做admin和user做的事情,这就是角色继承。

2.5动态权限配置

前面所说的权限配置都是在代码里写死的,xx路径具有xx角色这样的例子。要实现动态配置的话就要用到数据库,需要用户表,角色表,资源表,这样就能查到用户所关联的角色和所拥有的资源,如果要更改用户所具有的菜单,只有在角色与菜单关联表中动态修改即可。