拦截器是作用是对处理器进行拦截,在处理器之前进行一些需求的处理!
1、编写拦截器,实现 HandleInterceptor 接口,或者继承 HandleInterceptorAdapter 接口;并且重写三个拦截器的方法:
public class MyInterceptor implements HandleInterceptor{
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("处理器前执行的方法");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("处理器后执行的方法");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("处理器完成后执行的方法");
}
}
2、对上述的拦截器进行注册,才能被Spring发现;需要在项目启动时实现 WebMvcConfigurer 接口:
@Configuration
@SpringBootApplication(scanBasePackages = "***")
public class MyProjectApplication implements WebMvcConfigurer{
public static void main(String[] args){
SpringApplication.run(MyProjectApplication.class, agrs);
}
......
@Override
public void addInterceptors(InterceptorRegistry registry){
//利用注册器将上一步中创建的自定义拦截器添加进去
InterceptorRegistration ir = registry.addInterceptor(new MyInterceptor());
//指定拦截器拦截哪些http请求(这里主要拦截那些url中含有/interceptor/的请求)
ir.addPathPatterns("/interceptor/*");
}
}
3、最后在写控制器的时候,注意控制器的映射地址中要含有 /interceptor ,这样拦截器就会拦截该请求:
@Controller
@RequestMapping("/interceptor")
public class MyController {
@GetMapping("/start")
public String start(){
System.out.println("处理器逻辑执行");
return "/welcome";
}
}