Springboot 拦截器(Interceptor)
前言:
1、Spring MVC 框架:
作用范围: 拦截器是 Spring MVC 框架提供的一部分,与 Spring 框架紧密集成,主要用于拦截处理 Spring MVC 请求。
与 Spring 框架绑定: 拦截器直接与 Spring MVC 的 DispatcherServlet 集成,需要在 Spring 配置文件中进行配置。
2、初始化参数:
Spring Bean: 拦截器是 Spring Bean,因此可以利用 Spring IoC 容器进行初始化。
3、处理流程:
生命周期: 拦截器在请求进入控制器方法之前和控制器方法执行完成后执行。
流程: 请求进入拦截器链 -> 拦截器链执行逻辑 -> 请求传递给控制器方法 -> 控制器方法处理请求 -> 返回拦截器链 -> 拦截器链执行逻辑 -> 响应返回给客户端。
代码实现:
0.创建springboot项目
1.开发拦截器--自定义类 实现 HandlerInterceptor接口
import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //创建对象 @Component public class MyIntercepot implements HandlerInterceptor { /** * 请求到达控制器方法之前执行 * <p> * 参数: * HttpServletRequest request:当前请求对象 * HttpServletResponse response:当前响应对象 * Object handler:被请求的处理器对象。 * 返回值: * boolean 类型,表示是否继续执行后续的拦截器和控制器方法 * 使用场景: * 在这个方法中,你可以进行一些前置处理,例如身份验证、日志记录等。如果返回 true,表示继续执行后续的拦截器和控制器方法;如果返回 false,表示中断后续执行。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("1111111111"); return true; } /** * 控制器方法执行后、视图渲染之前执行 * <p> * 参数: * HttpServletRequest request:当前请求对象。 * HttpServletResponse response:当前响应对象。 * Object handler:被请求的处理器对象。 * ModelAndView modelAndView:控制器方法返回的 ModelAndView 对象。 * 在这个方法中,你可以对 ModelAndView 进行进一步处理,或者添加一些公共的模型数据。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("3333333333"); } /** * 在整个请求完成后(包括视图渲染完成)执行 * <p> * 参数: * HttpServletRequest request:当前请求对象。 * HttpServletResponse response:当前响应对象。 * Object handler:被请求的处理器对象。 * Exception ex:如果在请求处理过程中发生异常,将会传递到这里。 * 无论请求处理过程中是否发生异常,这个方法都会被调用。在这个方法中,可以进行一些清理工作,例如资源释放等。 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("44444444444"); } }
2. 配置拦截器
import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Component public class InterceptorConfig implements WebMvcConfigurer { //用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象 @Override public void addInterceptors(InterceptorRegistry registry) { //添加拦截器 registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/intercetor/**") //拦截所有控制器请求
.excludePathPatterns("/intercetor/test1");//排除指定的请求;
//第二个是一个例子:代表拦截其他的请求
registry.addInterceptor(new MyInterceptor2())
.addPathPatterns("/**")//拦截所有控制器请求
.excludePathPatterns("/user/findAll");//排除指定的请求;
}
}
3. 测试控制层
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("intercetor") public class IntercetorController { @RequestMapping("test") public String test(){ System.out.println("222222222"); return "index"; }
//进行拦截测试 @RequestMapping("test1") public String test1(){ System.out.println("222222222"); return "index"; } }
4.启动项目,访问接口进行测试