springsecurity前后端分离的RBAC动态权限管理实践
作者:Fwanmou
还在纠结Spring Security和Shiro选哪个?本文从功能、整合难度、社区支持等角度全面对比,并手把手教你整合Spring Boot,深入解析过滤器链执行流程,助你快速上手权限管理,为后续实现RBAC打下基础
一、为什么选择springsecurity,以及Shiro对比?
1.相同点:
- 认证功能
- 授权功能
- 加密功能
- 会话管理
- 缓存支持
- rememberMe功能
2.不同点:
优点:
- Spring Security基于Spring开发,项目中如果使用Spring作为基础,配合Spring Security做权限更加方便,而Shiro需要和Spring进行整合开发
- Spring Security功能比Shiro更加丰富些,例如 :cors跨站安全防护管理(暂时不过多赘述,此处省略若干字)
- Spring Security社区资源比Shiro丰富
- Spring Security作为spring的小儿子,和springboot的整合简直不要太简单,而Shiro和springboot的整合较为更麻烦一点
- 如果就是相对于ssm项目来说,更为推荐的是Shiro(如果你高兴,怎么玩都行,哎!你就玩)
缺点:
- Shiro的配置和使用比较简单,Spring Security上手复杂
- Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security依赖于Spring容器
3.那我们为什莫选择Spring Security:
- Spring Security和springboot 的整合更为简单,而后者spring boot 2为市场大热门的spring管理框架,应用非常广泛
- 提供了很多用户认证的功能,实现相关接口即可、以及封装了大量的方法,大大的节约了开发量:
二、springsecurity、springboot基本整合
1.新建springboot项目(版本:2.4.4 步骤暂不多说,port自己也配个我是901)
2.pom.xml 依赖导入
<dependencies>
<!-- spring security 相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- spring security 相关依赖-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>3.第一个controller编写
/**
* @author :alm
*/
@RestController
@RequestMapping("/introduction")
public class Demo1Controller {
/**
* 第一次运行项目
* @return :成功
*/
@GetMapping("/one")
public String one(){
return "成功了宝!";
}
}
4.废话不多说直接运行,你会发现控制台输出了这玩意(见下图),

然后访问 http://localhost:901/introduction/one 该路径你会发现一个有确的事他自动跳转到了 http://localhost:901/login,
那么Username为user :
Password为ac985071-dbf5-461b-8b59-9efbf337b0cf(随机密码,不信再运行一次试试)
输入成功打印

三、执行流程(敲黑板)
1:是不是感觉这玩意很有趣,那么就让我们初步看一下他执行流程
2:话不多说,直接上图

3:我们可以看见很多的filter,SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。现在对这条过滤器链的各个进行说明: 只说几个会常见的过滤器
- FilterSecurityInterceptor可以看做是过滤器链的出口,是一个方法级别的权限过滤器,位于最底部。
- ExceptionTranslationFilter 是个异常过滤器,用于异常处理。
- UsernamePasswordAuthenticationFilter默认情况下处理来自 /login 的请求。从表单中获取用户名和密码时,默认使用的表单 name 值为 username 和 password,这两个值可以通过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。其实就是做检验的。
四、挖坑,提需求
1.用户名密码mysql里面查,并实现登录
2.说好的RBAC权限管理呢?对了什么是RBAC?
我就将现实一个重要接口UserDetails再方法loadUserByUsername()内进行数据库查询操作,以及实现WebSecurityConfigurerAdapter的配置类进行权限管理,所以下次讲基于RBAC的数据库设计,以及简单的RBAC讲解(就怕自己忘记),再见!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
