Commit ad91f294 authored by zhouxudong's avatar zhouxudong

七天过期

parent 1e8587ab
......@@ -25,20 +25,29 @@ public class CurrentUserInterceptor implements AsyncHandlerInterceptor {
throws Exception {
// 从header中获取权限请求头
String authToken = request.getHeader(Constants.TOKEN_HEADER);
if(StringUtils.isBlank(authToken)){
if (StringUtils.isBlank(authToken)) {
throw new AuthException("未授权,请重新登录");
}
String token = authToken.substring("Bearer".length() + 1).trim();
JwtInfo jwtUser = JwtTokenUtil.getJwtUser(token);
Object redisToken = RedisUtil.get(RedisConstants.token + jwtUser.getPhone());
if(ObjectUtils.isEmpty(redisToken)||!token.equals(redisToken)){
if (ObjectUtils.isEmpty(redisToken) || !token.equals(redisToken)) {
throw new AuthException("当前会话失效,请重新登录");
}
//判断是否续期
// 判断是否续期
Long expire = RedisUtil.getExpire(RedisConstants.token + jwtUser.getPhone());
if(expire<Constants.addTime){
RedisUtil.set(RedisConstants.token + jwtUser.getPhone(), token, Constants.expireTime, TimeUnit.SECONDS);
if (expire < Constants.addTime) {
Object result = RedisUtil.get(RedisConstants.seventoken + jwtUser.getPhone());
RedisUtil.set(
RedisConstants.token + jwtUser.getPhone(),
token,
(!ObjectUtils.isEmpty(result) && Boolean.parseBoolean(result.toString()))
? Constants.sevenTime
: Constants.expireTime,
TimeUnit.SECONDS);
}
// 根据token信息,生成当前登录用户信息的设置,存放容器threadlocal
BaseContextHandler.setCurrentUserInfo(jwtUser);
......
......@@ -129,6 +129,8 @@ public class Constants {
public static final int INTERVAL_TIME =4*60;
//token 过期时间
public static Long expireTime = 86400L;
//7天免登录
public static Long sevenTime = 604800L;
//token 续期时间 12小时
public static Long addTime = 43200L;
......
......@@ -10,6 +10,8 @@ public class RedisConstants {
//------------------redis key--------------------------
public static final String token="Token:";
//是否7天免登录
public static final String seventoken="Seven_Token:";
//手机验证码 规则: 手机验证码:验证码类型:手机号
public static final String MSG_KEY="phone:message:";
//用户查看数据详情 使用额度 map存储: 格式: key phone + ":" + type value
......
......@@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lyy.user.config.LyyConfig;
import com.lyy.user.config.exception.ServiceException;
import com.lyy.user.config.other.BaseContextHandler;
import com.lyy.user.constant.Constants;
......@@ -108,11 +107,22 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
RedisUtil.set(
RedisConstants.token + sysUserInfo.getPhonenumber(),
token,
Constants.expireTime,
(!ObjectUtils.isEmpty(loginVo.getStatus()) && loginVo.getStatus())
? Constants.sevenTime
: Constants.expireTime,
TimeUnit.SECONDS);
//将用户基本信息一起返回
UserInfoVo userInfoVo =new UserInfoVo()
//是否开启7天免登录
RedisUtil.set(
RedisConstants.seventoken + sysUserInfo.getPhonenumber(),
!ObjectUtils.isEmpty(loginVo.getStatus()) && loginVo.getStatus(),
(!ObjectUtils.isEmpty(loginVo.getStatus()) && loginVo.getStatus())
? Constants.sevenTime
: Constants.expireTime,
TimeUnit.SECONDS);
// 将用户基本信息一起返回
UserInfoVo userInfoVo =
new UserInfoVo()
.setUserId(sysUserInfo.getUserId())
.setPhone(StringUtils.overlay(sysUserInfo.getPhonenumber(), "****", 3, 7))
.setToken(token);
......@@ -144,14 +154,27 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
throw new ServiceException(MsgConstants.codeError);
}
String token = JwtTokenUtil.createToken(sysUserInfo, null);
RedisUtil.set(
RedisConstants.token + sysUserInfo.getPhonenumber(),
token,
Constants.expireTime,
(!ObjectUtils.isEmpty(phoneLoginVo.getStatus()) && phoneLoginVo.getStatus())
? Constants.sevenTime
: Constants.expireTime,
TimeUnit.SECONDS);
//将用户基本信息一起返回
UserInfoVo userInfoVo =new UserInfoVo()
//是否开启7天免登录
RedisUtil.set(
RedisConstants.seventoken + sysUserInfo.getPhonenumber(),
!ObjectUtils.isEmpty(phoneLoginVo.getStatus()) && phoneLoginVo.getStatus(),
(!ObjectUtils.isEmpty(phoneLoginVo.getStatus()) && phoneLoginVo.getStatus())
? Constants.sevenTime
: Constants.expireTime,
TimeUnit.SECONDS);
// 将用户基本信息一起返回
UserInfoVo userInfoVo =
new UserInfoVo()
.setUserId(sysUserInfo.getUserId())
.setPhone(StringUtils.overlay(sysUserInfo.getPhonenumber(), "****", 3, 7))
.setToken(token);
......@@ -202,7 +225,7 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
*/
@Override
public boolean sendMsg(SendPhoneVo sendPhoneVo) {
if(SendMsgTypeEnum.UPDATE_PASSWORD.getCode().equals(sendPhoneVo.getType())){
if (SendMsgTypeEnum.UPDATE_PASSWORD.getCode().equals(sendPhoneVo.getType())) {
JwtInfo currentUserInfo = BaseContextHandler.getCurrentUserInfo();
String phone = currentUserInfo.getPhone();
sendPhoneVo.setPhone(phone);
......@@ -221,8 +244,8 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
String limitKey = RedisConstants.LIMIT_SMS + sendPhoneVo.getPhone();
boolean limitResult = RedisUtil.rateLimit(limitKey, intervalTime, limitSms);
if(!limitResult){
throw new ServiceException(String.format(MsgConstants.sms,limitSms));
if (!limitResult) {
throw new ServiceException(String.format(MsgConstants.sms, limitSms));
}
int randomInt = RandomUtil.randomInt(100000, 999999);
......@@ -337,7 +360,6 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
return this.updateById(sysUserInfo);
}
/**
* @description: 修改密码
* @date: 2023/11/23 10:21
......@@ -363,8 +385,8 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
throw new ServiceException(MsgConstants.codeError);
}
String newPassword =
DigestUtils.md5DigestAsHex(
(updateVo.getPassword() + lyyConfig.getPasswordSalt()).getBytes());
DigestUtils.md5DigestAsHex(
(updateVo.getPassword() + lyyConfig.getPasswordSalt()).getBytes());
sysUserInfo.setPassword(newPassword);
return this.updateById(sysUserInfo);
}
......@@ -372,7 +394,7 @@ public class SysUserInfoServiceImpl extends ServiceImpl<SysUserInfoMapper, SysUs
@Override
public UserInfoVo detail() {
JwtInfo jwtUser = BaseContextHandler.getCurrentUserInfo();
UserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser,UserInfoVo.class);
UserInfoVo userInfoVo = BeanUtil.copyProperties(jwtUser, UserInfoVo.class);
userInfoVo.setPhone(StringUtils.overlay(jwtUser.getPhone(), "****", 3, 7));
return userInfoVo;
}
......
......@@ -38,4 +38,6 @@ public class LoginVo {
// @Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\\\d)(?=.*[@$!%*#?&])[A-Za-z\\\\d@$!%*#?&]{6,20}$", message = "密码长度必须大于等于6位,小于等于20")
@ApiModelProperty(value = "密码",required = true)
private String password;
@ApiModelProperty(value = "是否开启7天免登录")
private Boolean status;
}
......@@ -30,4 +30,6 @@ public class PhoneLoginVo {
@NotEmpty(message ="验证码不能为空")
@ApiModelProperty(value = "验证码",required = true)
private String code;
@ApiModelProperty(value = "是否开启7天免登录")
private Boolean status;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment