多账户登录体系实现
- 有的时候,我们会在一个项目中设计两套账号体系。如电商系统中的 系统用户表 sys_user 和 用户会员表 ums_member。如下图所示。两套账户之间需要隔离操作。这种问题的模型就叫做多账户认证体系。
解决方案
Sa-Token:Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
RuoYi-Vue系统原有后台管理系统已经使用了SpringSecurity框架做了登录认证和权限认证。
为了不影响原有后台逻辑,在客户端方面我们新集成了Sa-Token,两套认证体系相互独立。在客户端方面我们一般只需要对用户进行认证处理,不需要进行权限认证。
集成方式
引入依赖
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
</dependency>
新建新的认证类
- 建立新的认证类的目的是为了防止后面可能还会有店员端的账户体系登录,所以我们直接建立一个新的认证类,后面如果还有其他账户体系的话就可以直接仿照用户端来做了。
package com.ruoyi.common.utils.satoken;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.fun.SaFunction;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author zouhuu
* @description Sa-Token 权限认证工具类 (client版)
* @date 2022/08/01 21:34:28
*/
@Component
public class StpClientUtil {
// 代码太长省略了,大家可以跳到最下面去,看系统完整源码。
}
使用方式
如何实现客户端账户登录?
- 可以通过 自定义工具类 StpClientUtil 中的 login方法实现用户账户的登录。
如何进行鉴权判断?
- 方式一、在需要认证的类上加入 @SaClientCheckLogin 注解
- 方式二、在需要认证的方式上加入 @SaClientCheckLogin 注解
/**
* @author zouhuu
* @description 客户端用户模块API
* @date 2022/08/01 21:57:52
*/
@Api(tags = "客户端-用户模块API")
@SaClientCheckLogin
@RestController
@RequestMapping("/api/client/ums")
public class UmsApi {
@Autowired
private IClientUmsService clientUmsService;
@ApiOperation("用户信息")
@GetMapping("/user/info")
public R<UmsUserVo> userInfo () {
return clientUmsService.userInfo();
}
@ApiOperation("用户信息保存")
@PostMapping("/user/save")
public R userSave (@RequestBody UmsUserDto umsUserDto) {
return clientUmsService.userSave(umsUserDto);
}
}
如何获取当前登录的用户ID?
- 可以通过 自定义工具类 StpClientUtil 中的 getLoginId 获取当前登录的用户ID。
完整代码
gitee.com/zouhuu_admin/RuoYi-Vue-Staging
本文含有隐藏内容,请 开通VIP 后查看