拦截器实现WebMvcConfigurer接口失效,使用WebMvcConfigurationSupport却成功为什么
时间: 2024-06-13 21:03:34 浏览: 8
根据提供的引用内容,推荐的方式是实现WebMvcConfigurer接口或继承EnableWebMvcConfiguration/DelegatingWebMvcConfiguration类来添加自定义拦截器。但是有时候实现WebMvcConfigurer接口添加的拦截器可能会失效,而使用WebMvcConfigurationSupport却可以成功添加拦截器。这是因为WebMvcConfigurationSupport是Spring MVC提供的一个配置类,它提供了一些默认的配置,包括一些拦截器的配置。如果我们继承WebMvcConfigurationSupport并重写其中的方法,就可以实现自定义的拦截器配置。但是需要注意的是,继承WebMvcConfigurationSupport会覆盖Spring MVC提供的默认配置,可能会导致一些问题,因此不推荐直接继承WebMvcConfigurationSupport。
相关问题
注册拦截器继承WebMvcConfigurer
当你想要注册拦截器并继承WebMvcConfigurer时,你需要按照以下步骤进行操作:
1. 创建一个实现了HandlerInterceptor接口的自定义拦截器类,例如MyInterceptor。
2. 在MyInterceptor类中实现preHandle、postHandle和afterCompletion等方法,以定义拦截器的逻辑。
3. 创建一个配置类,例如WebConfig,用于注册拦截器。
4. 在WebConfig类中实现WebMvcConfigurer接口,并重写addInterceptors方法。
5. 在addInterceptors方法中,使用registry.addInterceptor()方法将自定义拦截器注册到Spring MVC框架中。
下面是一个示例代码:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**"); // 设置拦截路径,这里设置为所有路径
}
}
```
在上述示例中,我们创建了一个WebConfig类并实现了WebMvcConfigurer接口。在addInterceptors方法中,我们使用registry.addInterceptor()方法添加了一个自定义拦截器(MyInterceptor),并使用addPathPatterns方法设置了拦截的路径为所有路径("/**")。
请根据你的具体需求修改MyInterceptor和addPathPatterns方法中的路径设置。完成以上步骤后,你的拦截器就会被注册并生效。
WebMvcConfigurer配置HandlerInterceptor拦截器失效
有时候在配置 HandlerInterceptor 拦截器时可能会出现失效的情况,主要有以下可能原因:
1. 配置顺序不正确:在多个 WebMvcConfigurer 实现类中配置 Interceptor 时,其执行顺序是根据配置顺序来的,如果先执行了配置 Interceptor 失效的类,那么配置 Interceptor 的代码就不会执行,导致 Interceptor 失效。
2. 拦截路径配置不正确:需要注意的是路径匹配是按照顺序匹配的,如果前面的匹配成功了就不会再进行后面的匹配。如果将 addPathPatterns() 改为 excludePathPatterns(),就会发现所有请求都没有被拦截了。此时需要检查拦截路径是否正确。
3. 拦截器中的逻辑有误:有时候我们在实现拦截器的 preHandle() 和 postHandle() 方法时,可能会有错误的逻辑导致拦截器失效,此时需要仔细检查拦截器中的逻辑是否正确。
4. 配置类没有被扫描到:有时候我们会将配置类放在错误的位置,导致配置类没有被扫描到,也就无法生效。此时需要检查配置类的位置是否正确,或者手动将配置类加入到扫描包的范围中。
总结起来,配置 Interceptor 失效的原因主要是因为顺序、拦截路径、拦截器中的逻辑、配置类位置等方面的问题。需要仔细检查代码,排查问题。