配置springmvc拦截器,无论对路径是否放行,都会多走一遍拦截器,用addPathPatterns不会多走一遍
正常来说对于放行应该不走拦截器,但是很奇怪的出现了一遍,不放行的多走了一遍拦截器,奇怪的问题,有专业人士懂得吗?
代码和效果如图所示
我来回答一下你的这个问题,若有帮助,还望采纳,点击回答右侧采纳即可,谢谢。
简单来讲就是controller中的void方法会导致springmvc使用你的请求url作为视图名称,然后它在渲染视图之前会检查你的视图名称,发现这视图会导致循环请求,就抛出一个ServletException,tomcat截取到这个异常后就转发到/error页面,就在这个转发的过程中导致了springmvc重新开始DispatcherServlet的整个流程,所以拦截器自然就执行了多次。
怎么解决?
请求的路径不存在或其他原因导致跳到/error页面
@Configuration
public class MVCConfig extends WebMvcConfigurationSupport {
//自定义的拦截器
@Bean
public SecurityInterceptor getSecurityInterceptor() {
return new SecurityInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截器
InterceptorRegistration registration = registry.addInterceptor(getSecurityInterceptor());
//排除的路径
registration.excludePathPatterns("/login");
registration.excludePathPatterns("/logout");
//将这个controller放行
registration.excludePathPatterns("/error");
//拦截全部
registration.addPathPatterns("/**");
}
}
亲测没有任何问题,把你代码搞个压缩包丢出来看看
不知道你解决了没?如果没有解决,
我们可以聊聊。
其实,前面的回答都是基于他们本地的环境来考虑,完全没有考虑到你的本身情况,
有可能你本身的环境版本根本和他们的不一样,所以会出现情况的问题。
我建议你检查下spring相关的版本,某些版本的实现方式有可能不一样。
或者,你直接看看spring源码中关于拦截器的说明,肯定可以解决你的问题。
先配置拦截所有路径再配置放行路径
可以看下这篇文章:【SpringMVC中的拦截器介绍】
我本地是没有出现这种情况的,你可以在拦截器的地方,输出一下拦截的请求,看一下每次拦截的请求都是什么。像这样。我感觉可能就是你请求了两次造成的