使用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验证!
相关文章
- Eclipse使用技巧–代码自动补全功能
- svn服务器配置与使用
- npm下载和使用(超详细)
- idm2023最新版下载器使用功能介绍
- OpenCV-Python实战(2) —— 使用OpenCV的绘图功能创建OpenCV的徽标
- 如何使用tsharkVM分析tshark的输出
- 【深入浅出Java原理及实战】「源码分析系列」深入分析反射功能基础使用和原理
- 如何使用小程序实现类似Vux的功能
- Vue非父子组件传值之事件总线(eventbus)的使用方式
- Chrome谷歌浏览器自带翻译功能无法使用的解决方案
- 使用Pydantic管理应用配置
- 使用 Format.js 来翻译 React 应用程序
- 使用socket实现聊天功能详解编程语言
- 谷歌全新设计的手机版与网页版Gmail界面曝光 功能更适合远程办公使用
- Linux下如何使用摄像头进行程序开发(程序摄像头Linux)
- 使用Linux和Snort防御网络安全(linuxsnort)
- 使用Oracle中的包:实现功能提升(oracle中包的使用)
- 使用Redis命令行实现登录功能 25字(redis登录命令行)
- 使用SQL Server轻松实现页码功能(sqlserver页码)
- 优化技巧大揭秘:linux多线程CPU使用完全指南(linux多线程cpu)
- MySQL的nowait功能简介及使用方法(mysqlnowait)
- 功能使用Redis构建购物车系统的实现方式(用redis实现购物车)
- 如何使用Oracle Pivot功能简化SQL代码(oraclepivot用法)
- 数据库使用NIO连接Oracle数据库轻松尝试(nio连接oracle)
- 如何使用Redis过滤器实现推送功能(redis过滤器怎么推送)
- 使用ViewPager实现android软件使用向导功能实现步骤
- 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析