SpringMVC由浅入深实用教程-SpringMVC核心技术(下篇)

多个拦截器的执行
项目:interceptor2。在项目 interceptor 基础上修改。
(1) 再定义一个拦截器

(2) 多个拦截器的注册与执行

(3) 控制台执行结果

当有多个拦截器时,形成拦截器链。拦截器链的执行顺序,与其注册顺序一致。需要再次强调一点的是,当某一个拦截器的 preHandle()方法返回true 并被执行到时,会向一个专门的方法栈中放入该拦截器的 afterCompletion() 方法。
多个拦截器中方法与处理器方法的执行顺序如下图:
从图中可以看出,只要有一个preHandle()方法返回false,则上部的执行链将被断开,其后续的处理器方法与postHandle()方法将无法执行。但,无论执行链执行情况怎样,只要方法栈中有方法,即执行链中只要有 preHandle()方法返回true,就会执行方法栈中的afterCompletion()方法。最终都会给出响应。
换一种表现方式,也可以这样理解:

权限拦截器举例
只有经过登录的用户方可访问处理器,否则,将返回“无权访问”提示。本例的登录,由一个JSP 页面完成。即在该页面里将用户信息放入session中。也就是说,只要访问过该页面,就说明登录了。没访问过,则为未登录用户。
项目:interceptor_permission。在项目 interceptor1 基础上修改。
(1) 修改 index 页面

(2) 定义 Controller

(3) 定义 welcome 页面

(4) 定义权限拦截器
当preHandle()方法返回false 时,需要使用 request 或 response 对请求进行响应。

(5) 定义 fail 页面

(6) 注册权限拦截器

(7) 定义 login 页面

(8) 定义 logout 页面

(9) 项目测试
Step1:在地址栏先直接提交system.do 请求

Step2:访问login.jsp,进行用户登录

Step3:再次提交system.do 请求

Step4:访问logout.jsp,进行用户退出

Step5:三次提交system.do 请求

最后奉上视频教程👇,视频观看效果更佳!!走过路过别忘素质三连哦~~

