- 多账户登录体系实现
- 解决方案
- 集成方式
- 引入依赖
- 新建新的认证类
- 使用方式
- 如何实现客户端账户登录?
- 如何进行鉴权判断?
- 如何获取当前登录的用户ID?
- 完整代码
- 有的时候,我们会在一个项目中设计两套账号体系。如电商系统中的 系统用户表 sys_user 和 用户会员表 ums_member。如下图所示。两套账户之间需要隔离操作。这种问题的模型就叫做多账户认证体系。
-
Sa-Token:Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
-
RuoYi-Vue系统原有后台管理系统已经使用了SpringSecurity框架做了登录认证和权限认证。
-
为了不影响原有后台逻辑,在客户端方面我们新集成了Sa-Token,两套认证体系相互独立。在客户端方面我们一般只需要对用户进行认证处理,不需要进行权限认证。
新建新的认证类cn.dev33 sa-token-spring-boot-starter cn.dev33 sa-token-dao-redis-jackson
- 建立新的认证类的目的是为了防止后面可能还会有店员端的账户体系登录,所以我们直接建立一个新的认证类,后面如果还有其他账户体系的话就可以直接仿照用户端来做了。
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;
@Component
public class StpClientUtil {
// 代码太长省略了,大家可以跳到最下面去,看系统完整源码。
}
使用方式
如何实现客户端账户登录?
- 可以通过 自定义工具类 StpClientUtil 中的 login方法实现用户账户的登录。
- 方式一、在需要认证的类上加入 @SaClientCheckLogin 注解
- 方式二、在需要认证的方式上加入 @SaClientCheckLogin 注解
@Api(tags = "客户端-用户模块API")
@SaClientCheckLogin
@RestController
@RequestMapping("/api/client/ums")
public class UmsApi {
@Autowired
private IClientUmsService clientUmsService;
@ApiOperation("用户信息")
@GetMapping("/user/info")
public R 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



