网站500,公司logo注册,标智客logo在线设计生成器免费,不利于优化网站的因素文章目录 HTTP请求拦截器链需求定义写一个Controller方法接口写三个http请求拦截器把拦截器加入到配置中#xff0c;并且配置拦截规则在postman里面发送请求#xff0c;看下测试结果是否正确 HTTP请求拦截器链
需求定义
我们写一个包含三个HTTP请求拦截器的拦截器链#x… 文章目录 HTTP请求拦截器链需求定义写一个Controller方法接口写三个http请求拦截器把拦截器加入到配置中并且配置拦截规则在postman里面发送请求看下测试结果是否正确 HTTP请求拦截器链
需求定义
我们写一个包含三个HTTP请求拦截器的拦截器链写一个controller控制器方法最后在postman里面调用controller控制器里面的接口方法看看这个请求的经过路径。 首先说结论如下图
写一个Controller方法接口
如下图
写三个http请求拦截器
我们定义三个http请求拦截器如下图 然后每个http请求拦截器都实现preHandle、postHandle、afterCompletion这三个方法如下图
preHandle、postHandle、afterCompletion方法的执行时机 当一个http请求发过来的时候如果没有http请求拦截器这个请求是会直接发送到Controller控制器里面的但是如果有http请求拦截器的话外部发来的http请求会先进入到拦截器中拦截。可能我们程序中有多个http请求拦截器比如有三个http请求拦截器那么这三个http请求拦截器会组成一个拦截器链外部发来的http请求先进入第一个拦截器的preHandle方法如果这个拦截器放行了也就是preHandle方法返回了true那么该请求就会被第一个拦截器放行然后该请求会进入到拦截器链中的第一个拦截器中同样是进入到preHandle方法当中如果preHandle方法返回true则同样放行接着http请求进入到第三个拦截器的preHandle方法里面最后该请求才会进入到controller控制器中执行。注意如果preHandle方法返回false则该请求就不能传递到controller控制器中了。
执行完controller方法之后该http请求就算是执行完毕了接着会从拦截器链中倒着走出去先走拦截器3的postHandle方法再走拦截器2的postHandle方法最后再走拦截器1的postHandle方法 走完了postHandle方法之后再走拦截器3的afterCompletion方法再走拦截器2的afterCompletion方法最后走拦截器1的afterCompletion方法
这样就执行完了一个http请求的全部过程流程图如下图
把拦截器加入到配置中并且配置拦截规则
我们需要写一个拦截器配置类把需要用到的拦截器放到拦截器链中并且配置每个拦截器拦截的http请求的规则就是拦截什么样的http请求比如只拦截/user的请求或者只拦截/student的请求具体是什么样的请求规则我们可以自定义。拦截器配置类如下图 可以看到我们这里把拦截器1、拦截器2、拦截器3全部都放到了拦截器链中然后每个拦截器都是拦截所有的http请求。
在postman里面发送请求看下测试结果是否正确
首先看下我们控制器里面接收请求的方法如下图
然后在postman里面发送一个/test请求如下图 可以看到我们的controller控制器里面的方法确实成功执行了接着去看下在执行controller控制器方法之前三个拦截器里面的preHandle方法是否执行了以及在执行controller控制器方法之后三个拦截器里面的postHandle方法和afterCompletion方法是否执行了控制台输出信息如下图 可以发现这里在执行Controller控制器之前确实执行了拦截器中的preHandle方法以及在执行Controller控制器之后也确实执行了拦截器中的postHandle和afterCompletion方法并且顺序也是正确的。