前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用sa-token完成登录功能

使用sa-token完成登录功能

原创
作者头像
Java king
发布2023-02-21 18:10:38
1K0
发布2023-02-21 18:10:38
举报
文章被收录于专栏:后端Java后端Java

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

1:首先引入sa-token依赖

代码语言:java
复制
<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

代码语言:java
复制
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并提示账号或密码错误 请您检查好账号密码重新输入

代码语言:javascript
复制
Optional.ofNullable(userInfoDto.getUserName()).map(a -> userMapper.selectOne(new LambdaQueryWrapper<TIdUser>().eq(TIdUser::getUserName, a))).orElse(null);

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

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

代码语言:java
复制
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分钟后重试

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

获取当前用户IP

4:效果

输入错误五次之后

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档