zl程序教程

您现在的位置是:首页 >  其它

当前栏目

使用sa-token完成登录功能

使用 功能 登录 完成 Token sa
2023-06-13 09:17:08 时间

虽然紫菀草越被人践踏越长得快,可是青春越是浪费,越容易消失。——莎士比亚《亨利四世上篇》

1:首先引入sa-token依赖

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.28.0</version>
</dependency>

有什么疑惑和问题可以去官方文档写的非常详细:https://sa-token.dev33.cn/doc/index.html#/

号称:手把手教你敲代码 狗头加持

2:从application.yml文件中配置sa-token

server:
    # 端口
    port: 8081

# Sa-Token配置
sa-token: 
    # token名称 (同时也是cookie名称)
    token-name: satoken
    # token有效期,单位s 默认30天, -1代表永不过期 
    timeout: 2592000
    # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
    activity-timeout: -1
    # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) 
    is-concurrent: true
    # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) 
    is-share: false
    # token风格
    token-style: uuid
    # 是否输出操作日志 
    is-log: false

然后就可以写咱们的业务代码了 咱们的今天主体是登录 所以就不写如何验证token以及统一拦截配置拦截器等操作。

3:业务代码

下方代码:首先判断当前是否传入用户名 如果传入了用户名使用Lambda表达式配合MP查询是否存在当前用户如果没有orElse返回为null并提示账号或密码错误 请您检查好账号密码重新输入

Optional.ofNullable(userInfoDto.getUserName()).map(a -> userMapper.selectOne(new LambdaQueryWrapper<TIdUser>().eq(TIdUser::getUserName, a))).orElse(null);

如果查询到当前用户就判断传输的密码是否正确这里使用MD5加密对比,如果存在及正确的话

存入会话id并删除redis错误日志然后返回用户信息

if (user != null && userInfoDto.getPassword() != null && user.getPassword().equals(EncryptUtil.encrypt(userInfoDto.getPassword()))) {
            //在登录时写入当前会话的账号id
            StpUtil.login(user.getId());
            //登录成功之后删除redis的错误日志
            ipInfoUtil.getRedisIpInfo(true,request);
            return new Result(ResultCode.OK, UserInfoVo.builder().id(user.getId()).userName(user.getUserName()).realName(user.getRealname())
                    .branchVoList(userMapper.getBranchInfo(user.getId())).roleVoList(userMapper.getRoleInfo(user.getId())).build(), StpUtil.getTokenInfo().getTokenValue());
        }

如果验证不通过的话根据当前用户IP往redis中添加一条错误日志 超过五次之后提示5分钟后重试

return Optional.ofNullable(ipInfoUtil.getRedisIpInfo(false,request)).orElse(new Result(ResultCode.INTERNAL_SERVER_ERROR, "账号或密码错误 请您检查好账号密码重新输入"));

获取当前用户IP

4:效果

输入错误五次之后

输入正确账号密码之后返回用户信息以及token

明天在写如何使用sa-token验证!