Interceptor拦截器对一次请求进行多次拦截
配置拦截器后拦截器会对一个请求进行多次拦截
/** * 拦截器 * */ public class TokenInterceptor implements HandlerInterceptor { /* * 在DispatcherServlet之前执行 * */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//从请求头内获取tokne String token = request.getHeader("token"); if(verifyToken(token)){ log.info("token验证成功"); return true; } log.error("token验证失败"); return false; } }
@Configuration public class InterceptorConfig extends WebMvcConfigurationSupport { /** * springBoot2.0后配置拦截器需要extends 的 WebMvcConfigurerAdapter 已经过时,取而代之的是 WebMvcConfigurationSupport * WebMvcConfigurerAdapter 只是对 WebMvcCofigurer 的空实现,而WebMvcConfigurerSupport对WebMvcCofigurer的实现更全面, * 但是继承WebMvcConfigurerSupport之后SpringBoot的webMvc自动配置会失效,导致视图解析器无法解析并返回对应的视图,如果需要返回逻辑视图就继承WebMvcCofigurer * * WebMvcConfigurationSupport 在整个程序中只会生效一个,如果实现了WebMvcConfigurationSupport类,那么继承WebMvcConfigurer的类将不会生效 * * WebMvcConfigurationSupport是重写默认配置,而WebMvcConfigurerAdapter是在默认配置的上面增加扩展 * */ @Autowired private BaseAPI baseAPI; @Value("${request.whitelist}") private String whitelist;//请求白名单//配置拦截器,拦截请求验证tokne @Override protected void addInterceptors(InterceptorRegistry registry) { String[] whites = whitelist.split(","); //设置拦截的请求 //设置不拦截的请求 registry.addInterceptor(new TokenInterceptor(baseAPI)).addPathPatterns("/**").excludePathPatterns(whites); }
}
在请求中发现当执行完毕查询后又回到了拦截器中,再次回到拦截器中时就得不到header中的tokenl了,是因为有静态资源访问导致的增加配置
//增加判断过滤调静态资源访问,这样只有第一次请求会进入,之后的请求都不会进入了 if (handler instanceof ResourceHttpRequestHandler){ return true; }
完整代码
/** * token拦截器 * */ @Slf4j public class TokenInterceptor implements HandlerInterceptor { private BaseAPI baseAPI; /* * 在DispatcherServlet之前执行 * */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof ResourceHttpRequestHandler){ return true; } //从请求头内获取tokne String token = request.getHeader("token"); if(verifyToken(token)){ log.info("token验证成功"); return true; } log.error("token验证失败"); return false; }
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构