From 42028b6eab3814bed41002b73f7122dcc28ff90d Mon Sep 17 00:00:00 2001 From: chen-xin-zhi <3588068430@qq.com> Date: Tue, 3 Jun 2025 20:57:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E5=86=85=E9=83=A8?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0token=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/userInfo/UserInfoResetRequest.java | 6 +++++- .../promotion/service/userInfo/UserInfoService.java | 1 + .../service/userInfo/impl/UserInfoServiceImpl.java | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) 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;