From eda2c7553386fb8f42afe42891fa2b588bdd30a8 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 16 Jul 2025 15:01:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=AF=E5=8C=BA=E8=B4=A6=E5=8F=B7=E9=99=90?= =?UTF-8?q?=E5=88=B6=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/interceptor/AuthInterceptor.java | 22 +++++++++++++++---- .../mobile/impl/AppScenicServiceImpl.java | 2 +- .../com/ycwl/basic/utils/JwtTokenUtil.java | 8 +++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/ycwl/basic/interceptor/AuthInterceptor.java b/src/main/java/com/ycwl/basic/interceptor/AuthInterceptor.java index fb90beb..29c35f1 100644 --- a/src/main/java/com/ycwl/basic/interceptor/AuthInterceptor.java +++ b/src/main/java/com/ycwl/basic/interceptor/AuthInterceptor.java @@ -8,7 +8,10 @@ import com.ycwl.basic.constant.RequestConstant; import com.ycwl.basic.exception.CheckTokenException; import com.ycwl.basic.exception.MissTokenException; import com.ycwl.basic.exception.PermissionException; +import com.ycwl.basic.exception.TokenExpireException; +import com.ycwl.basic.mapper.ScenicAccountMapper; import com.ycwl.basic.model.jwt.JwtInfo; +import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity; import com.ycwl.basic.utils.JwtTokenUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -23,14 +26,21 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.List; +import static com.ycwl.basic.constant.JwtRoleConstant.MERCHANT; + @Slf4j @Component public class AuthInterceptor implements HandlerInterceptor { @Autowired RedisTemplate redisTemplate; + @Autowired + private ScenicAccountMapper scenicAccountMapper; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { @@ -68,10 +78,14 @@ public class AuthInterceptor implements HandlerInterceptor { JwtInfo jwtInfo; try { jwtInfo = JwtTokenUtil.parsingToken(token); -// LocalDateTime expireTime = jwtInfo.getExpireTime(); -// if (LocalDateTime.now(ZoneId.systemDefault()).isAfter(expireTime)) { -// throw new TokenExpireException("token过期"); -// } + if (StringUtils.equals(jwtInfo.getRoleId(), MERCHANT.type)) { + Long merchantId = jwtInfo.getUserId(); + ScenicAccountEntity account = scenicAccountMapper.findAccountById(merchantId.toString()); + LocalDateTime expireTime = jwtInfo.getExpireTime(); + if (account.getUpdateTime().toInstant().getEpochSecond() != expireTime.atZone(ZoneId.systemDefault()).toEpochSecond()) { + throw new TokenExpireException("token过期"); + } + } BaseContextHandler.setToken(token); BaseContextHandler.setName(jwtInfo.getName()); BaseContextHandler.setUserId(String.valueOf(jwtInfo.getUserId())); diff --git a/src/main/java/com/ycwl/basic/service/mobile/impl/AppScenicServiceImpl.java b/src/main/java/com/ycwl/basic/service/mobile/impl/AppScenicServiceImpl.java index 85942d3..b6a973c 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/impl/AppScenicServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/mobile/impl/AppScenicServiceImpl.java @@ -99,7 +99,7 @@ public class AppScenicServiceImpl implements AppScenicService { jwtInfo.setAccount(scenicAccount.getAccount()); jwtInfo.setUserId(scenicAccount.getId()); jwtInfo.setRoleId(MERCHANT.type); - String token = jwtTokenUtil.generateToken(jwtInfo); + String token = jwtTokenUtil.generateToken(jwtInfo, scenicAccount.getUpdateTime()); ScenicLoginRespVO scenicLoginRespVO = new ScenicLoginRespVO(); BeanUtil.copyProperties(scenicAccount,scenicLoginRespVO); diff --git a/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java b/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java index 4a829d6..99f2bbb 100644 --- a/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java +++ b/src/main/java/com/ycwl/basic/utils/JwtTokenUtil.java @@ -13,6 +13,8 @@ import org.springframework.web.context.request.ServletRequestAttributes; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; import java.util.Map; import java.util.Objects; @@ -53,6 +55,12 @@ public class JwtTokenUtil { String token = JwtAnalysisUtil.generateToken(jwtInfo, bytes, expireTime); return token; } + public static String generateToken(JwtInfo jwtInfo, Date expireTime) throws Exception { + byte[] bytes = RsaKeyUtil.toBytes(PRI_KEY); + LocalDateTime dt = expireTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + String token = JwtAnalysisUtil.generateToken(jwtInfo, bytes, dt); + return token; + } /**