springboot Interceptor拦截器excludePathPatterns忽略失效怎么解决

springboot Interceptor拦截器excludePathPatterns忽略失效

excludePathPatterns方法是排除访问路径,但是当你排除的url路径在项目中并不存在的时候,springboot会将路径编程/error,从而无法进行排除.

例如下面代码:

registry.addInterceptor(new MyInterceptor()).addPathPatterns("

SpringBootInterceptor拦截器excludePathPatterns忽略失效的解决方法


/**"
).excludePathPatterns("
/login"
);

如果/login这个访问路径,在项目中不存在,那么当你访问http://xxxx/login的时候,依然会被拦截,因为此时变成了error这个路径,在你自定义的拦截器中也可以通过request.getRequestUrl得到验证.

但是如果你用的是普通的springmvc项目,这时候就不会被拦截,但是因为没有login这个路径,所以会显示404页面.

springboot拦截器排除无效、springboot中excludePathPatterns无效

可以断点 访问看看 访问的路径和配置的路径是否一样、失效



对于使用SpringBoot开发Web应用程序的开发者而言,拦截器(Interceptor)是一个非常实用的工具。而在拦截器的使用过程中,有时可能会遇到excludePathPatterns属性失效的情况。那么,该如何解决这个问题呢?
1. 问题的出现
在使用SpringBoot拦截器时,通常会使用excludePathPatterns属性来指定不需要拦截的请求路径,以避免对该请求造成干扰。但是,在某些情况下,excludePathPatterns属性可能会失效。
2. 问题的原因
excludePathPatterns属性失效的原因通常是因为拦截器的执行顺序不正确。在SpringBoot中,拦截器的顺序是由@Configuration注解的@Bean方法返回的值的顺序决定的。如果拦截器的顺序不正确,那么excludePathPatterns属性就可能失效。
3. 问题的解决
为了解决这个问题,我们需要在@Configuration注解的类中按照正确的顺序配置拦截器,以确保excludePathPatterns属性的正确使用。一般情况下,拦截器的执行顺序应该按照以下步骤进行:
- 需要特别注意的是,如果多个拦截器处理同一个请求 path ,拦截器的方法执行顺序取决于 addInterceptor 的添加顺序,建议早add的拦截器放在后边,而后add的拦截器放在前面
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 登录拦截的管理路径:
// /admin/**
// TODO 对后面的登录拦截做了改进,放在了 option() 配置处
registry.addInterceptor(new LoginInterceptor()).addPathPatterns(\"/admin/**\",\"/edit/**\")
.excludePathPatterns(\"/admin/login\",\"/admin/logout\",\"/admin/code\",\"/edit/upload\",\"/edit/mdfile\",\"/edit/images/**\")
.order(1);
registry.addInterceptor(new CrossDomainInterceptor()).addPathPatterns(\"/**\")
.order(2);
registry.addInterceptor(new JwtInterceptor()).addPathPatterns(\"/admin/**\",\"/edit/**\")
.excludePathPatterns(\"/admin/login\",\"/admin/logout\",\"/admin/code\",\"/edit/upload\",\"/edit/mdfile\",\"/edit/images/**\")
.order(3);
registry.addInterceptor(new UserInterceptor()).addPathPatterns(\"/user/**\")
.excludePathPatterns(\"/user/collect/all\",\"/user/collect/add\",\"/user/collect/delete\",\"/user/login\",\"/user/loginAction\",\"/user/logout\")
.order(4);
}
}
通过上述配置,我们可以保证excludePathPatterns属性始终正确作用于对应的请求路径,避免了因拦截器执行顺序不正确而导致的excludePathPatterns失效的问题。
总之,拦截器是SpringBoot开发中非常实用的工具。但是,在使用拦截器时,我们需要注意拦截器的执行顺序,以避免excludePathPatterns属性失效。相信本文能够帮助大家更好地理解SpringBoot Interceptor拦截器excludePathPatterns忽略失效的问题,并提供一些解决方法。