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); + } + } +}