博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 拦截器 学习
阅读量:5739 次
发布时间:2019-06-18

本文共 3892 字,大约阅读时间需要 12 分钟。

hot3.png

拦截器, 技术java反射技术, 不依赖Spring容器, 可以使用 Spring 容器管理的bean.

客户端发起请求到 DispatcherServlet , 然后根据 HandlerMapping 匹配处理器, 返回一个 HandlerExecution 对象, 包含 处理器 和 拦截器, 这里的拦截器会对处理器进行拦截, 通过拦截器可以增强处理器的功能.

7e1846412e994c92e83a3dd6dc4a24772e7.jpg

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

package com.codingos.springboot.test.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class Interceptor1 implements HandlerInterceptor {	/**	 * 在 controller 方法之前执行, 返回false则结束, 返回true则继续下一步.	 */	@Override	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {		System.out.println("****** 处理器前方法 *******");		return true;//		request.getRequestDispatcher("/file/uploadPage").forward(request, response);//		return false;	}	/**	 * 在处理器方法之后, 视图渲染之前执行.	 */	@Override	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {		System.out.println("****** 处理器后方法 *******");		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);	}	/**	 * 在视图渲染之后执行	 */	@Override	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {		System.out.println("****** 处理器完成后方法 *******");		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);	}}
package com.codingos.springboot.test.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class MultiInterceptor1 implements HandlerInterceptor {	@Override	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {		System.out.println(this.getClass().getName() + "处理器前方法");		return true;	}		@Override	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {		System.out.println(this.getClass().getName() + "处理器后方法");		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);	}		@Override	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {		System.out.println(this.getClass().getName() + "处理器完成后方法");		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);	}}

2. 注册拦截器, springboot 主类 实现 WebMvcConfigurer

@SpringBootApplicationpublic class SpringBootTestApplication implements WebMvcConfigurer{		/**	 * 注册拦截器	 */	@Override	public void addInterceptors(InterceptorRegistry registry) {//		registry.addInterceptor(new Interceptor1()).addPathPatterns("/interceptor/*");		registry.addInterceptor(new MultiInterceptor1()).addPathPatterns("/interceptor/*");		registry.addInterceptor(new MultiInterceptor2()).addPathPatterns("/interceptor/*");		registry.addInterceptor(new MultiInterceptor3()).addPathPatterns("/interceptor/*");	}	public static void main(String[] args) {		SpringApplication.run(SpringBootTestApplication.class, args);	}}

3. 多个拦截器的顺序

com.codingos.springboot.test.interceptor.MultiInterceptor1处理器前方法com.codingos.springboot.test.interceptor.MultiInterceptor2处理器前方法com.codingos.springboot.test.interceptor.MultiInterceptor3处理器前方法执行处理器逻辑com.codingos.springboot.test.interceptor.MultiInterceptor3处理器后方法com.codingos.springboot.test.interceptor.MultiInterceptor2处理器后方法com.codingos.springboot.test.interceptor.MultiInterceptor1处理器后方法视图渲染com.codingos.springboot.test.interceptor.MultiInterceptor3处理器完成后方法com.codingos.springboot.test.interceptor.MultiInterceptor2处理器完成后方法com.codingos.springboot.test.interceptor.MultiInterceptor1处理器完成后方法

 

转载于:https://my.oschina.net/zdtdtel/blog/3014506

你可能感兴趣的文章
Linux之V4L2基础编程【转】
查看>>
PHP的模板引擎smarty原理是什么(整理)
查看>>
hihocoder第218周:AC自动机
查看>>
三步学会用spring开发OSGI——(第一步:环境篇)
查看>>
CCKS-2017 行业知识图谱构建与应用-下篇
查看>>
【GIS】ArcGIS Server密码
查看>>
一个屌丝程序猿的人生(八十五)
查看>>
sftp子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
查看>>
【SSH网上商城项目实战11】查询和删除商品功能的实现
查看>>
SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
查看>>
高阶函数 实现sum(2)(3) 柯里化
查看>>
LeetCode题库13. 罗马数字转整数(c++实现)
查看>>
在select标签中添加a标签
查看>>
为什么多数游戏服务端是用 C++ 来写
查看>>
Docker & ASP.NET Core (2):定制Docker镜像
查看>>
Convolutional Pose Machines
查看>>
Flutter与Android混合开发及Platform Channel的使用
查看>>
NVIDIA笔试归来
查看>>
内存加载DLL
查看>>
浅析C/C++中的switch/case陷阱
查看>>