集成JWT 结合验证码实现登录

文章介绍了如何使用Sa-Token集成JWT实现简单模式的登录功能,包括创建HashMap存储TOKEN,生成令牌,以及根据配置从Redis和MySQL检查验证码开关。在登录过程中,如果验证码开启,则进行校验;否则,执行登录逻辑,设置存储器对象并生成Token。

集成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();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值