diff --git a/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoResetRequest.java b/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoResetRequest.java index 728a428..242e101 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoResetRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/userInfo/UserInfoResetRequest.java @@ -38,7 +38,6 @@ public class UserInfoResetRequest implements Serializable { @Schema(description = "密码(建议加密存储)", example = "qingcheng") private String userPassword; - /** * 确认密码 */ @@ -47,6 +46,11 @@ public class UserInfoResetRequest implements Serializable { @Schema(description = "确认密码(建议加密存储)", example = "qingcheng") private String userConfirmPassword; + /** + * token(内部重置使用) + */ + @Schema(description = "token(内部重置使用)", example = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTY5MjE5MzE5NywiZXhwIjoxNjkyMTk3Nzk3fQ.Q_5Y5Z") + private String sourceToken; @Serial private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/greenorange/promotion/service/userInfo/UserInfoService.java b/src/main/java/com/greenorange/promotion/service/userInfo/UserInfoService.java index 1029f46..e2242fb 100644 --- a/src/main/java/com/greenorange/promotion/service/userInfo/UserInfoService.java +++ b/src/main/java/com/greenorange/promotion/service/userInfo/UserInfoService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.greenorange.promotion.model.dto.userInfo.*; import com.greenorange.promotion.model.entity.UserInfo; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletRequest; import java.util.List; diff --git a/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserInfoServiceImpl.java b/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserInfoServiceImpl.java index 0bcc15b..458e5fe 100644 --- a/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserInfoServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserInfoServiceImpl.java @@ -1,6 +1,7 @@ package com.greenorange.promotion.service.userInfo.impl; import cn.hutool.core.util.RandomUtil; +import com.auth0.jwt.interfaces.DecodedJWT; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -29,6 +30,7 @@ import com.greenorange.promotion.utils.RegexUtils; import com.greenorange.promotion.utils.SendSmsUtil; import com.greenorange.promotion.utils.SqlUtils; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -277,6 +279,12 @@ public class UserInfoServiceImpl extends ServiceImpl payload.put("userAccount", phoneNumber); payload.put("userPassword", userPassword); token = jwtUtils.generateToken(payload); + // 获取token的过期时间 + String sourceToken = userInfoResetRequest.getSourceToken(); + DecodedJWT decodedJWT = jwtUtils.verify(sourceToken); + long expirationTime = decodedJWT.getExpiresAt().getTime() - System.currentTimeMillis(); + // 将token存入Redis黑名单,并设置过期时间与token一致 + redisTemplate.opsForValue().set(sourceToken, sourceToken, expirationTime, TimeUnit.MILLISECONDS); } // 更新token return token;