第四十章:Spring MVC框架之拦截器10

版权声明:作者:java_wxid https://blog.csdn.net/java_wxid/article/details/84668172

第八章 拦截器

拦截器最典型的用法是检查用户是否登录,登录后可以执行目标handler方法,未登录则跳转到登录页面。这样的操作要是在每个拦截器内部来写就太麻烦了,统一提取到拦截器中是明智之举。
1.HandlerInterceptor接口
①preHandle()方法

签名:boolean preHandle(HttpServletRequest, HttpServletResponse, Object) 在执行目标handler方法之前执行,如果返回true,则继续执行后续拦截器和目标handler方法;如果返回false则不执行。注意:返回false时最好借助转发或重定向等方式为客户端提供一个响应页面。
②postHandle()方法

签名:void postHandle(HttpServletRequest, HttpServletResponse, Object, ModelAndView) 在执行目标handler方法之后、渲染视图之前执行。
③afterCompletion()方法

在渲染视图之后、返回响应之前执行。
2.HandlerInterceptorAdapter类

实现HandlerInterceptor接口需要把所有抽象方法都实现,而继承HandlerInterceptorAdapter类则可以有选择的重写需要的方法,更加便捷,推荐使用。

在这里插入图片描述

3.配置方式
①拦截所有请求

<mvc:interceptors>
    <bean class="com.interceptor.FirstInterceptor"/>
    <bean class="com.interceptor.SecondInterceptor"/>
</mvc:interceptors>

②精确指定拦截的请求

<mvc:interceptors>
    <bean class="com.interceptor.FirstInterceptor"/>
    <bean class="com.interceptor.SecondInterceptor"/>
    <mvc:interceptor>
        <mvc:mapping path="/*"/>
        <mvc:exclude-mapping path="/specailPath"/>
        <bean class="com.interceptor.SpecialInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

4.多个拦截器的执行顺序

①按正序依次调用preHandle()方法 ②执行目标handler方法 ③按反序调用postHandle()方法 ④按反序调用afterCompletion()方法

猜你喜欢

转载自blog.csdn.net/java_wxid/article/details/84668172