springmvc拦截器的excludePathPatterns问题,如何解决?

配置springmvc拦截器,无论对路径是否放行,都会多走一遍拦截器,用addPathPatterns不会多走一遍
正常来说对于放行应该不走拦截器,但是很奇怪的出现了一遍,不放行的多走了一遍拦截器,奇怪的问题,有专业人士懂得吗?
代码和效果如图所示

img

img

img

img

img

我来回答一下你的这个问题,若有帮助,还望采纳,点击回答右侧采纳即可,谢谢。
简单来讲就是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中的拦截器介绍

我本地是没有出现这种情况的,你可以在拦截器的地方,输出一下拦截的请求,看一下每次拦截的请求都是什么。像这样。我感觉可能就是你请求了两次造成的

img