虽然紫菀草越被人践踏越长得快,可是青春越是浪费,越容易消失。——莎士比亚《亨利四世上篇》
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验证!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。