HandlerInterceptor 和 WebMvcConfigurer

HandlerInterceptor是Spring MVC框架提供的拦截器,用于在请求处理的前后执行一些自定义的逻辑。它可以在请求被处理之前和之后对请求进行拦截和处理,例如日志记录、身份认证、权限校验等。HandlerInterceptor 可以拦截所有的请求,也可以只拦截某些特定的请求。

WebMvcConfigurer是Spring MVC框架提供的用于定制化WebMvc配置的接口,它可以配置拦截器、消息转换器、视图解析器、静态资源等,以及添加自定义的HandlerMapping和HandlerAdapter等。通过实现WebMvcConfigurer接口,可以对Spring MVC框架进行定制化配置,以满足应用程序的特定需求。

一般来说,我们可以通过实现HandlerInterceptor接口来拦截请求并处理请求的前后逻辑,通过实现WebMvcConfigurer接口来对Spring MVC框架进行定制化配置。同时,我们可以在WebMvcConfigurer中注册自定义的HandlerInterceptor。

 

2.HandlerInterceptor 和 WebMvcConfigurer那个先执行

在 Spring MVC 中,HandlerInterceptor 和 WebMvcConfigurer 都是在 DispatcherServlet 中执行的。具体来说,HandlerInterceptor 的执行顺序是先于 Controller 的方法执行,而 WebMvcConfigurer 的执行顺序是在 DispatcherServlet 初始化时执行。因此,HandlerInterceptor 先于 WebMvcConfigurer 执行。

3.HandlerInterceptor 和 WebMvcConfigurer具体使用细节

HandlerInterceptor是Spring MVC提供的一种拦截器,可以拦截请求的处理过程,常用于登录拦截、日志记录、权限控制等。WebMvcConfigurer是Spring MVC提供的一个配置类接口,可以用于配置Spring MVC的一些参数和特性,比如拦截器、消息转换器、静态资源映射等。

下面是HandlerInterceptor和WebMvcConfigurer的具体使用细节:

  1. HandlerInterceptor的使用:

(1)定义一个拦截器类并实现HandlerInterceptor接口,并实现preHandle、postHandle和afterCompletion方法。

(2)在配置类中继承WebMvcConfigurerAdapter类,并重写addInterceptors方法,将定义的拦截器添加到拦截器链中。

(3)拦截器可以通过preHandle方法返回false来中断请求的处理过程,也可以在postHandle方法中修改响应结果。

(4)拦截器可以获取到请求的URL、请求参数、请求头等信息,并可以获取到响应结果和异常信息。

  1. WebMvcConfigurer的使用:

(1)定义一个配置类并实现WebMvcConfigurer接口,并重写需要配置的方法,比如addInterceptors、configureMessageConverters等。

(2)可以通过addInterceptors方法添加拦截器,通过configureMessageConverters方法配置消息转换器。

(3)如果需要配置静态资源映射,可以通过addResourceHandlers方法实现。

(4)还可以通过configureDefaultServletHandling方法配置默认的Servlet处理。

总之,HandlerInterceptor和WebMvcConfigurer是Spring MVC中常用的功能组件,可以帮助我们实现更灵活、更可控的请求处理逻辑。在使用时需要注意细节,比如拦截器的顺序、拦截器的作用范围等。

 

 

5.HandlerInterceptor 和 WebMvcConfigurer代码使用详细

HandlerInterceptor 是 Spring MVC 框架提供的拦截器接口,用于在请求处理前、后或者请求完成后对请求进行拦截和处理。而 WebMvcConfigurer 是 Spring MVC 框架提供的配置接口,用于配置 Spring MVC 框架的各种参数。

下面是一个使用 HandlerInterceptor 和 WebMvcConfigurer 的示例代码:

@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
private class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 在请求处理前进行拦截和处理 return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// 在请求处理后进行拦截和处理
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 在请求完成后进行拦截和处理
}
}}

在这个示例代码中,我们首先创建了一个名为 WebMvcConfig 的配置类,并实现了 WebMvcConfigurer 接口。在这个类中,我们重写了 addInterceptors 方法,用于添加拦截器。在这里,我们添加了一个 MyInterceptor 拦截器,并指定了拦截的请求路径为 "/*"。

MyInterceptor 是一个自定义的拦截器类,实现了 HandlerInterceptor 接口,并重写了 preHandle、postHandle 和 afterCompletion 方法,用于在请求处理前、后或者请求完成后对请求进行拦截和处理。

在 preHandle 方法中,我们可以对请求进行拦截和处理,并返回一个 boolean 值,表示是否允许请求继续执行。

在 postHandle 方法中,我们可以对请求处理后的结果进行拦截和处理,并进行后续操作。

在 afterCompletion 方法中,我们可以在请求完成后进行拦截和处理,并进行后续操作。

通过这样的方式,我们可以通过自定义拦截器来对请求进行拦截和处理,并进行后续操作。同时,通过 WebMvcConfigurer 接口,我们可以配置 Spring MVC 框架的各种参数,以满足不同的需求。

 

posted @ 2023-05-16 14:36  黑狗已醒  阅读(734)  评论(0编辑  收藏  举报