RuoYi-Vue快速集成Sa-Token 保留原有认证授权逻辑
前言
集成Sa-Token的原因?
- 由于在项目中,我们有两套账号体系。如电商系统中的 系统用户表 sys_user 和 用户会员表 ums_member, 在这种场景下,如果使用若依原有的认证授权逻辑,会发生逻辑冲突。
- 修改RuoYi-Vue原有系统的认证授权逻辑,如果对SpringSecurity不熟悉则势必会浪费很多时间与精力,改起来也会比较痛苦。
- Sa-Token 的 API 设计非常简单,对于APP用户来说,我们一般只需要进行登录认证操作即可。
基础的目的?
- 保留RuoYi-Vue原有的后台管理认证授权模块。
- 尽可能的少修改代码。
- 只做兼容不做修改
实现后的结果?
-
在修改完成后系统将有两套认证授权逻辑,两套认证环境相互隔离。
-
系统后台管理原有的认证授权逻辑
-
APP或小程序的认证授权逻辑
-
具体实现(一共四个步骤)
-
第一步:添加Sa-Token的依赖
修改文件: ruoyi-common -> pom.xml
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.30.0</version> </dependency> <!-- Sa-Token 整合 Redis (使用jackson序列化方式) --> <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-dao-redis-jackson</artifactId> <version>1.30.0</version> </dependency>
-
第二步:修改原有认证授权拦截器配置,让他不拦截APP或小程序发送过来的请求, 通过 /api 前缀判断请求的来源
修改文件: ruoyi-framework -> src / main / java.com.ruoyi.framework / config / SecurityConfig.java
// APP请求 .antMatchers("/api/**").permitAll()
-
第三步:添加Sa-Token配置,对APP或小程序发送过来的请求进行拦截
新增文件: ruoyi-framework -> src / main / java.com.ruoyi.framework / config / SaTokenConfig.java
/** * @author zouhuu * @description [Sa-Token 权限认证] 配置类 * @date 2022/06/15 15:32:59 */ @Configuration public class SaTokenConfig implements WebMvcConfigurer { // 注册拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { // 注册Sa-Token的路由拦截器 registry.addInterceptor(new SaRouteInterceptor()) // 拦截 APP或小程序的 所有请求 .addPathPatterns("/api/**") // 排除 APP或小程序的 认证授权请求,如登录等 .excludePathPatterns("/api/auth/**"); } }
-
第四步:编写对应的业务代码,实现会员用户的登录,与获取会员用户信息
新增文件:ruoyi-admin -> src / main /java / com.ruoyi / web / api / AuthApi.java
/** * @author zouhuu * @description 授权认证API * @date 2022/06/15 15:43:07 */ @RestController @RequestMapping("/api/auth") @Api("APP授权认证API") public class AuthApi { @PostMapping("/login") @ApiOperation("账号密码登录") public AjaxResult login(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); // TODO 实现具体的业务逻辑 StpUtil.login("1111"); ajax.put(StpUtil.getTokenName(), StpUtil.getTokenValue()); return ajax; } }
新增文件:ruoyi-admin -> src / main /java / com.ruoyi / web / api / ums / UmsUserApi.java
/** * @author zouhuu * @description 用户API * @date 2022/06/15 15:53:32 */ @RestController @RequestMapping("/api/user") @Api("用户模块API") public class UmsUserApi { @GetMapping("/info") @ApiOperation("获取用户信息") public AjaxResult info() { // TODO 实现具体的获取用户信息逻辑 return AjaxResult.success(StpUtil.isLogin()); } }
-
到此为止,整个集成过程就算完成了,大家如果有问题可以看看官方的文档,,一些配置信息啥的就不介绍了。
参考文章
- https://sa-token.dev33.cn/doc/
- https://doc.iocoder.cn/user-center/