SpringMVC学习笔记(六)拦截器

拦截器

概念:动态拦截方法调用的机制,eg.权限控制…

image-20230319153617449

区分:拦截器和过滤器:

  • 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
  • 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强

使用:

1.创建拦截器类,实现`HandlerInterceptor接口

 package com.yuan.controller.interceptor;
 ​
 import org.springframework.stereotype.Component;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 ​
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 ​
 @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...");
    }
 }

2.在springmvcconfig里扫描到拦截器所在的包

3.配置要拦截的路径

 //@Configuration
 public class SpringMvcSupport extends WebMvcConfigurationSupport {
 //   @Autowired
 //   @Autowired
     private ProjectInterceptor projectInterceptor;
 ​
     public SpringMvcSupport(ProjectInterceptor projectInterceptor) {
         this.projectInterceptor = projectInterceptor;
    }
 ​
     @Override
     protected void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(projectInterceptor).addPathPatterns("/books/*","/books");
    }
 }
image-20230319170656491

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注