From 1e835ca9bd015fe23bbbdc03d700de9295093503 Mon Sep 17 00:00:00 2001 From: Spark <2666652@gmail.com> Date: Sat, 12 Oct 2024 00:39:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=8B=A6=E6=88=AA=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/LoginCheckInterceptor.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 RollCallServer/src/main/java/cc/aspark/interceptor/LoginCheckInterceptor.java diff --git a/RollCallServer/src/main/java/cc/aspark/interceptor/LoginCheckInterceptor.java b/RollCallServer/src/main/java/cc/aspark/interceptor/LoginCheckInterceptor.java new file mode 100644 index 0000000..9398604 --- /dev/null +++ b/RollCallServer/src/main/java/cc/aspark/interceptor/LoginCheckInterceptor.java @@ -0,0 +1,53 @@ +package cc.aspark.interceptor; + +import cc.aspark.constant.MessageConstant; +import cc.aspark.context.BaseContext; +import cc.aspark.exception.UserNotLoginException; +import cc.aspark.properties.JwtProperties; +import cc.aspark.utils.JwtUtil; +import io.jsonwebtoken.Claims; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + + +/** + * jwt令牌校验的拦截器 + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class LoginCheckInterceptor implements HandlerInterceptor { + + private final JwtProperties jwtProperties; + + /** + * 校验jwt + */ + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws UserNotLoginException { + + //判断当前拦截到的是Controller的方法还是其他资源 + if (!(handler instanceof HandlerMethod)) { + //当前拦截到的不是动态方法,直接放行 + return true; + } + + //1、从请求头中获取令牌 + String token = request.getHeader(jwtProperties.getTokenName()); + + //2、校验令牌 + try { + log.info("jwt校验: {}", token); + Claims claims = JwtUtil.parseJWT(jwtProperties.getSecretKey(), token); + BaseContext.setCurrentId(Long.valueOf(claims.get("id").toString())); + //3、通过,放行 + return true; + } catch (Exception ex) { + throw new UserNotLoginException(MessageConstant.USER_NOT_LOGIN); + } + } +}