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. 配置拦截器
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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. 测试控制层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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" ; } <br> <br> //进行拦截测试 @RequestMapping ( "test1" ) public String test1(){ System.out.println( "222222222" ); return "index" ; } } |
4.启动项目,访问接口进行测试
标签:
后端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!