1
什么拦截器?
SpringMVC中的拦截器类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等等。
2
如何使用拦截器?
总体:先进行定义后配置
第一步:定义(两种方式)
这里介绍第一种:
Pre在控制器方法前执行,返回值为boolean类型,true继续向下执行,否则中断后续所有操作。
Post在调用控制器方法之后,解析视图之前执行,可通过此方法对请求域中的模型和视图做进一步修改。
After在渲染视图之后执行,资源清理,记录日志。
第二步:在SpringMVC的配置文件中进行配置了。
第一个bean:全局拦截器,拦截所有请求。
Mapping path:配置拦截路径,/**表示拦截所有路径,/hello表示拦截以/hello结尾的路径。
Exclude-mapping path:配置不需要拦截的路径
注:一个<mvc :interceptor></mvc :interceptor>块中,子元素的配置顺序应按照上述代码编写。
3
拦截器的执行流程
单个拦截器:
多个拦截器:
在执行preHandle之前,先执行拦截器1,返回true再执行拦截器2,执行完控制器方法之后,先执行拦截器2的postHandle再执行拦截器1的postHandle,渲染完视图后,先执行拦截器2的afterCompletion再执行拦截器1的afterCompletion。
注:在执行完控制器方法之后,其使用拦截器的顺序类似栈的后进先出。
4
应用案例:
首先导入相应jar包,创建模型User类,控制器UserController类,拦截器LoginInterceptor类,以及相对应的视图login.jsp和main.jsp和相应的配置文件。
控制器类UserController包含四个方法,分别是登录、注销、转到登录界面,转到主界面。
拦截器因为要对未登录用户进行拦截,以防止直接绕过登录进入main界面,所以需要在控制器方法执行之前进行拦截,即需要在preHandle设置。设置的步骤,首先获取URL是否是login,如果是直接返回true。其次,获取session,判断是否存在用户登录数据,如果有,即返回true,若没有,即判断为想绕过登录进入界面的行为,此时,给出提示信息,并转发到登录界面。同时返回false。
最后,在SpringMVC配置文件中配置拦截器。