集成jwt (注入jwt实现 三种模式:简单模式,混入模式,无状态模式;这里以简单模式作为演示)
@Configuration
public class SaTokenConfigure {
// Sa-Token 整合 jwt (Simple 简单模式)
@Bean
public StpLogic getStpLogicJwt() {
return new StpLogicJwtForSimple();
}
Sa-Token 登录方法实现流程
1 new HashMap
Map<String, Object> ajax = new HashMap<>();
key 为一个通用常量信息 TOKEN(String) Velue(token值 )
然后就是生成令牌环节
loginService.login()
loginService.login(loginBody.getUsername(),......
service层
上来获取请求对象
HttpServletRequest request = ServletUtils.getRequest();
第二步调用了获取验证码开关的方法 返回值是true 或者false
boolean captchaEnabled = configService.selectCaptchaOnOff();
通过selectCaptchaEnabled()方法中的(根据键名查询参数配置信息)
selectConfigByKey(String configKey)
从redis中成功获取到value值
假如redis缓存查不到,则开启验证码,保证安全性
在mysql查找时,设置了自定义的SysConfigMapper.xml文件, 并在 sys_config 表中根据 configKey来查找对应的value。
若返回结果不为null:则将对应的key和value 存入redis缓存中,即:key: sys_config:sys.account.captchaEnabled -> value: true(false);
若返回结果为null: 则返回结果为“” (空字符串),在利用Convert.toBool(captchaEnabled)返回boolean类型的值。
第三步:判断验证码开关是true 或者false
如果为false 校验验证码 抛异常
如果为true
执行 生成 Token
//获取当前储存器对象 并设置
SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
//根据账号id,进行登录
StpUtil.login(loginUser.getLoginId(), deviceType.getDevice());
// 获取当前 Token 的 Token-Session 对象
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
// 获取当前会话的token值 并返回
return StpUtil.getTokenValue();
文章介绍了如何使用Sa-Token集成JWT实现简单模式的登录功能,包括创建HashMap存储TOKEN,生成令牌,以及根据配置从Redis和MySQL检查验证码开关。在登录过程中,如果验证码开启,则进行校验;否则,执行登录逻辑,设置存储器对象并生成Token。
970





