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