为何不在WebMvcConfigurer中直接写拦截逻辑,需要到HandlerInterceptor中
时间: 2024-04-01 16:31:22 浏览: 78
WebMvcConfigurer是Spring MVC提供的一个配置接口,它可以用来配置Spring MVC的一些特性,例如视图解析器、拦截器、格式化器、消息转换器等等。虽然WebMvcConfigurer中也可以配置拦截器,但是它只能配置一些简单的拦截器,如果需要自定义拦截器并对请求进行更加细粒度的控制,就需要实现HandlerInterceptor接口了。
HandlerInterceptor接口是Spring MVC提供的一个拦截器接口,它可以在请求被处理前、处理时和处理后进行拦截,并对请求进行一些处理。相比于WebMvcConfigurer中的简单拦截器,HandlerInterceptor可以更加细粒度地控制请求的处理,并且可以对请求进行更加灵活的处理,例如记录日志、校验请求参数、鉴权等等。
因此,如果需要实现一个自定义的拦截器,并对请求进行更加细粒度的控制,就需要实现HandlerInterceptor接口。而WebMvcConfigurer中的拦截器则可以用来配置一些简单的拦截器,例如跨域拦截器、请求头拦截器等等。
相关问题
WebMvcConfigurer配置HandlerInterceptor拦截器失效
有时候在配置 HandlerInterceptor 拦截器时可能会出现失效的情况,主要有以下可能原因:
1. 配置顺序不正确:在多个 WebMvcConfigurer 实现类中配置 Interceptor 时,其执行顺序是根据配置顺序来的,如果先执行了配置 Interceptor 失效的类,那么配置 Interceptor 的代码就不会执行,导致 Interceptor 失效。
2. 拦截路径配置不正确:需要注意的是路径匹配是按照顺序匹配的,如果前面的匹配成功了就不会再进行后面的匹配。如果将 addPathPatterns() 改为 excludePathPatterns(),就会发现所有请求都没有被拦截了。此时需要检查拦截路径是否正确。
3. 拦截器中的逻辑有误:有时候我们在实现拦截器的 preHandle() 和 postHandle() 方法时,可能会有错误的逻辑导致拦截器失效,此时需要仔细检查拦截器中的逻辑是否正确。
4. 配置类没有被扫描到:有时候我们会将配置类放在错误的位置,导致配置类没有被扫描到,也就无法生效。此时需要检查配置类的位置是否正确,或者手动将配置类加入到扫描包的范围中。
总结起来,配置 Interceptor 失效的原因主要是因为顺序、拦截路径、拦截器中的逻辑、配置类位置等方面的问题。需要仔细检查代码,排查问题。
拦截器在spring-mvc中的配置为什么不一样
在Spring MVC中,拦截器的配置与Spring的其他组件配置略有不同,这是因为Spring MVC框架有其特定的请求生命周期和处理流程。
在Spring MVC中,拦截器是一种用于在处理请求之前、之后或之间执行预处理和后处理逻辑的组件。它可以用于实现身份验证、日志记录、性能监控等功能。拦截器可以应用于整个应用程序或特定的请求处理器。
拦截器的配置在Spring MVC中通常是通过实现HandlerInterceptor接口来定义自定义拦截器,并通过WebMvcConfigurer接口的addInterceptors方法将其注册到Spring MVC配置中。
具体配置步骤如下:
1. 创建一个类实现HandlerInterceptor接口,实现preHandle、postHandle和afterCompletion方法,分别用于定义拦截器的前置处理、后置处理和完成处理逻辑。
2. 创建一个类实现WebMvcConfigurer接口,重写addInterceptors方法。
3. 在addInterceptors方法中,通过InterceptorRegistry对象的addInterceptor方法将自定义拦截器添加到拦截器链中,并可以通过addPathPatterns和excludePathPatterns方法指定拦截器的匹配路径和排除路径。
4. 将自定义的WebMvcConfigurer实例注册到Spring MVC配置中。
相比于Spring中其他组件的配置,Spring MVC的拦截器配置需要遵循特定的接口和方法来定义和注册拦截器,这是因为Spring MVC框架需要在请求处理的不同阶段调用拦截器的相应方法,以实现请求的拦截和处理。这样的设计使得拦截器能够与Spring MVC框架紧密集成,并在请求处理过程中起到特定的作用。
阅读全文