SpringMVC 自定义拦截器
自定义拦截器

Spring MVC 可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现 HandlerInterceptor 接口。
该接口有以下 3 个方法:

(1)preHandle():
这个方法在业务处理器处理请求之前被调用,在该
方法中对用户请求 request 进行处理。如果程序员决定该拦截器对
请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去
进行处理,则返回 true;如果程序员决定不需要再调用其他的组件
去处理请求,则返回false

即:继续走下去,返回 true。如果我们要程序被拦截(例如没有登录访问某个页面),要返回 false。

(2)postHandle():
这个方法在业务处理器处理完请求后,但是 DispatcherServlet 向客户端返回响应前被调用,在该方法中对用户请求 request 进行处理。

即返回视图之前被调用。

(3)afterCompletion():
这个方法在 DispatcherServlet 完全处理完请
求后被调用,可以在该方法中进行一些资源清理的操作。

SpringMVC 自定义拦截器_mvc

配置自定义拦截器

SpringMVC 自定义拦截器_mvc_02

我们可以排除一些 url 不被拦截:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/users/login"/>
        <bean class="com.english17.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

注意观察下图中拦截器被执行的顺序:
SpringMVC 自定义拦截器_拦截器_03