一:准入器配置
1.编写配置类。
2.实现WebMvcConfigurer接口
3.重写addInterceptors(InterceptorRegistry registry) 方法
4.声明类注解为配置类:@Configuration
5.编写拦截器
6.在配置类中写入拦截器。
在 Spring MVC 中,可以通过配置文件或者 Java 代码来注册拦截器。
import org.springframework.context.annotation.Bean;
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 WebMvcConfig implements WebMvcConfigurer {
@Bean
public A initA() {
return new A();
}
@Bean
public B initB() {
return new B();
}
@Bean
public C initC() {
return new C();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(A()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
registry.addInterceptor(B()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
registry.addInterceptor(C()).addPathPatterns("/**");// 添加拦截器,并设置拦截路径
}
}
我们创建了一个名为 WebMvcConfig 的配置类,并实现了 WebMvcConfigurer 接口。通过重写 addInterceptors 方法,我们可以向 Spring MVC 注册拦截器。在这个方法中,我们调用 registry 对象的 addInterceptor 方法来添加自定义的拦截器 A,B,C,并使用 addPathPatterns 方法来设置拦截的路径,这里设置为 "/*" 表示拦截所有请求。
通过这样的配置,Spring MVC 将会在处理请求时自动调用我们定义的拦截器,并根据设置的路径进行拦截处理。
二:实现拦截器
在 Spring MVC 中,可以通过实现 HandlerInterceptor 接口来定义拦截器,并在请求处理的不同阶段进行预处理、后处理和完成处理。以下是一个简单的 Java 代码示例,演示了如何实现一个自定义的 HandlerInterceptor:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CustomInterceptor implements HandlerInterceptor {
// 在请求处理之前进行调用(Controller 方法调用之前)
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("Pre Handle method is Calling");
return true; // 如果返回 false,则请求不会继续向下执行,即拦截请求
}
// 请求处理之后进行调用(Controller 方法调用之后)
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is Calling");
}
// 请求完成后进行调用,即视图渲染完毕或者调用方异常(在拦截器链中的所有拦截器都执行完毕时)
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) throws Exception {
System.out.println("Request and Response is completed");
}
}
三:拓展-SpringMvC流程
1.发起请求-》前端控制器DispatcherSevlet
2.前端控制器DispatcherSevlet请求处理器映射器HandlerMapping查找Handler
3.处理器映射器HandlerMapping获取处理器Handler,并返回给前端控制器DispatcherSevlet
4.前端控制器DispatcherSevlet请求处理器适配器HandlerAdapter处理Handler
5.处理器适配器HandlerAdapter调用方法执行Handler,执行业务逻辑(Controller->Service->dao->sql->Controller)
6.Handler处理器返回ModelAndView给处理器适配器HandlerAdapter
7.处理器适配器HandlerAdapter返回ModelAndView给前端控制器DispatcherServlet
8.DispatcherServlet请求视图解析器ViewAResolver进行视图解析
9.视图解析器ViewResolver解析视图,ViewResolver返回视图给DispatcherServlet
10.DispatcherServlet请求View进行视图渲染
11.返回渲染后的视图给DispatcherServlet
12.DispatcherServlet响应请求