@Component
public class HeaderInterceptor implements WebMvcConfigurer {
private static final LogUtil log = LogUtil.getLogger(HeaderInterceptor.class);
private static final List<String> excludeUrls = Arrays.asList(
"/api/test"
);
// 用于排除的url
private static final List<String> excludeSwaggerUrls = Arrays.asList("/test","/doc.html");
@Resource
private RedisUtils redisUtils;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
if ("OPTIONS".equals(request.getMethod())) {
return true;
}
// 放行逻辑,请求的url,判断url是否需要拦截
String requestURI = request.getRequestURI();
log.info("请求URL:" + requestURI);
if (excludeUrls.contains(requestURI) || excludeSwaggerUrls.contains(requestURI)) {
return true;
}
// 获取token
String token = request.getHeader(Constant.TOKEN);
if (StringUtils.isBlank(token)) {
token = request.getParameter(Constant.TOKEN);
if (StringUtils.isBlank(token)) {
throw new BusinessException(-12, "未获取到token");
}
}
//获取缓存token
Map<String, Object> map = (Map) redisUtils.get(token);
if (null == map) {
throw new BusinessException(-12, "token异常,token已过期或非法");
}
// 将user信息写入到context上下文中
// token自动续期
long endTime = redisUtils.getExpire(token);
if (endTime < Constant.EXPIRE_TIME_END) {
redisUtils.expire(token, Constant.TOKEN_EXPIRE); // 指定过期时间
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) {
// 清除context上下文中
}
})
.excludePathPatterns("/doc.html");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html", "doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
}
}
Web监听器
最新推荐文章于 2024-11-01 14:48:20 发布