springboot拦截器的问题
我做了一个路径不对重定向到/404路径,但是我的拦截器中会判断token,它会先执行到拦截器里面,我这些不对的路径就不想执行判断token的逻辑,我想到的是把所有能访问的路径写出来判断当前访问的路径是不是能访问的路径,但是感觉那样写不太好,有没有什么更好的方法?
webconfig
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/member/login");
}
}
errorconfig
@Component
public class ErrorConfig implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
ErrorPage resourceNotFound = new ErrorPage(HttpStatus.NOT_FOUND,"/404");
ErrorPage accessDenied = new ErrorPage(HttpStatus.UNAUTHORIZED,"/401");
ErrorPage beAttacked = new ErrorPage(HttpStatus.BAD_GATEWAY,"/502");
ErrorPage serverDown = new ErrorPage(HttpStatus.SERVICE_UNAVAILABLE,"/503");
registry.addErrorPages(resourceNotFound,accessDenied,beAttacked,serverDown);
}
}
拦截器
@Slf4j
public class RequestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
if (StringUtil.isEmpty(token)) {
throw new CustomException(ResultEnum.notTokenError.getCode(),ResultEnum.notTokenError.getMessage());
}
try {
JwtUtil.verify(token);
} catch (TokenExpiredException tee) {
throw new CustomException(ResultEnum.tokenOverdue.getCode(),ResultEnum.tokenOverdue.getMessage());
} catch (SignatureVerificationException sve) {
throw new CustomException(ResultEnum.tokenSignatureError.getCode(),ResultEnum.tokenSignatureError.getMessage());
} catch (InvalidClaimException ice) {
throw new CustomException(ResultEnum.invalidToken.getCode(),ResultEnum.invalidToken.getMessage());
} catch (AlgorithmMismatchException ame) {
throw new CustomException(ResultEnum.tokenAlgorithmicError.getCode(),ResultEnum.tokenAlgorithmicError.getMessage());
} catch (JWTDecodeException jde) {
throw new CustomException(ResultEnum.tokenException.getCode(),ResultEnum.tokenException.getMessage());
}
String requestUri = request.getRequestURI();
log.info("requestUri:{}", requestUri);
return true;
}
}