自定义拦截器,需要实现 Handlerinterceptor 接口。而该接口中含有三个方
法:
1、 preHandle(request,response, Object handler) 预处理方法:
该方法在处理器方法执行之前执行。其返回值为 boolean,若为 true,则紧
接着会执行处理器方 法,且会将 afterCompletion()方法放入到一个专门的方
法栈中等待执行。
重要:
是整个项目的入口,门户。 当 preHandle 返回 true 请求可以被处理。
preHandle 返回 false,请求到此方法就截止。
参数:
Object handler : 被拦截的控制器对象
返回值 boolean
true:请求是通过了拦截器的验证,可以执行处理器方法。
拦截器的 MyInterceptor 的 preHandle()
=====执行 MyController 中的 doSome 方法=====
拦截器的 MyInterceptor 的 postHandle()
拦截器的 MyInterceptor 的 afterCompletion()
false:请求没有通过拦截器的验证,请求到达拦截器就截止了。 请求没有
被处理
拦截器的 MyInterceptor 的 preHandle()
特点:
a.方法在控制器方法(MyController 的 doSome)之前先执行的。 用
户的请求首先到达此方法
b.在这个方法中可以获取请求的信息, 验证请求是否符合要求。可以
验证用户是否登录, 验证用户是否有权限访问某个连接地址(url)。
如果验证失败,可以截断请求,请求不能被处理。
如果验证成功,可以放行请求,此时控制器方法才能执行。
2、postHandle(request/response/ Object handlei,modelAndView) 后处理
方法:
该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不
会执行。 由于该方法是在处理器方法执行完后执行,且该方法参数中包含
ModelAndView,所以该方法可以修 改处理器方法的处理结果数据,且可以修改
跳转方向。
参数:
Object handler:被拦截的处理器对象 MyController
ModelAndView mv:处理器方法的返回值
特点:
a.在处理器方法之后执行的(MyController.doSome())