过滤器实现Filter接口,是处理Servlet请求的;而拦截器实现HanderInception接口,处理Spring-mvc请求的。



在经过步骤一直接可以到4

注意:ProjectInterceptor类 最好在Controler包中。属于表现层。





- @Component
- //定义拦截器类,实现HandlerInterceptor接口
- //注意当前类必须受Spring容器控制
- public class ProjectInterceptor implements HandlerInterceptor {
- @Override
- //原始方法调用前执行的内容
- //返回值类型可以拦截控制的执行,true放行,false终止
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // String contentType = request.getHeader("Content-Type");
- // HandlerMethod hm = (HandlerMethod)handler;
- // System.out.println("preHandle..."+contentType);
- return true;
- }
- @Override
- //原始方法调用后执行的内容
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
- System.out.println("postHandle...");
- }
- @Override
- //原始方法调用完成后执行的内容
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
- System.out.println("afterCompletion...");
- }
- }

注意要在controller包中定义拦截器类。
- @Configuration
- @ComponentScan({"com.itheima.controller"})
- @EnableWebMvc
- //实现WebMvcConfigurer接口可以简化开发,但具有一定的侵入性
- public class SpringMvcConfig implements WebMvcConfigurer{
- @Autowired
- private ProjectInterceptor projectInterceptor;
- @Autowired
- private ProjectInterceptor2 projectInterceptor2;
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- //配置多拦截器
- registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
- registry.addInterceptor(projectInterceptor2).addPathPatterns("/books","/books/*");
- }
- }