Spring 拦截器流程及多个拦截器的顺序 |
您所在的位置:网站首页 › 拦截器prehandle › Spring 拦截器流程及多个拦截器的顺序 |
拦截器是 Spring MVC 中的组件,它可以在进入请求方法前做一些操作,也可以在请求方法后和渲染视图后做一些事情。 拦截器的定义 SpringMVC 的拦截器只需要实现 HandlerInterceptor 接口,并进行配置即可。HandlerInterceptor 接口的定义如下: 在 HandlerInterceptor 中共有三个方法,每个方法的含义如下: preHandler:进入请求方法之前执行; postHandler:请求方法执行完成之后执行; afterCompletion:视图渲染后执行。 拦截器的执行流程 在 preHandle 方法中,它的返回值是 boolean 类型的,它的返回值影响着请求方法,以及 postHandle 和 afterCompletion 的执行。具体如下。 也就是说,在 preHandle 中如果返回 false,那么后续的流程将不被执行,这可能也是拦截器命名的由来。 测试拦截器 写一个简单拦截器,代码如下: 创建了一个 TestInterceptor 的监听器类,它实现了 HandlerInterceptor 的所有接口。写完 TestInterceptor 还需要进行注册。代码如下: 再来写一个简单的请求方法,代码如下: 来启动我们的项目,并进行访问,控制台的输出如下: 多个拦截器的执行顺序 我们来写多个相同的监听器,分别是 TestInterceptor、TestInterceptor2 和 TestInterceptor3。然后我们进行注册,注册代码如下: 请求我们的方法,输出如下: 注意观察输出的顺序,preHandle 方法是按注册顺序进行执行的,而 postHandle 和 afterCompletion 跟注册顺序是相反的。 让 preHandle 进行拦截 我们让 TestInterceptor2 的 preHandle 返回值为 false,然后查看一下输出内容。 可以看到,TestInterceptor2 的 preHandle 的返回值为 false 以后,相当于在 TestInterceptor2 的 preHandle 后续流程则不再继续执行了。 我们调整一下注册的顺序,代码如下: @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(testInterceptor2()); registry.addInterceptor(testInterceptor()); registry.addInterceptor(testInterceptor3()); } 修改顺序后的输出如下: 可以看到它后面的流程都被拦截了,没有机会执行了。 总结 拦截器是使用一个 List 进行保存,我们可以在项目中添加多个拦截器来完成不同的功能,比如可以进行 Token 的验证,权限的获取等。我们可以放到不同的拦截器中来进行相关的操作。 求关注 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |