自定义拦截器

来源:互联网 发布:心蓝抢票软件官方网 编辑:程序博客网 时间:2024/05/18 04:37

自定义拦截器

1. 实现HandlerInterceptor拦截器接口

  • preHandle 方法: 在执行目标方法之前调用,放回false将结束执行流程
  • postHandle 方法: 在调用目标方法后,渲染视图前执行
  • afterCompletion 方法: 在渲染视图后执行
public class FirstIntercept implements HandlerInterceptor {    /**     * 该方法在目标方法之前被调用.     * 若返回值为 true, 则继续调用后续的拦截器和目标方法.     * 若返回值为 false, 则不会再调用后续的拦截器和目标方法.     *     * 可以考虑做权限. 日志, 事务等.     */    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,                             Object handler) throws Exception {        System.out.println("preHandle");        //返回 false 将不会执行后续代码        return false;    }    /**     * 调用目标方法之后, 但渲染视图之前.     * 可以对请求域中的属性或视图做出修改.     */    public void postHandle(HttpServletRequest request, HttpServletResponse response,                           Object handler, @Nullable ModelAndView modelAndView) throws Exception {        System.out.println("postHandle");    }    /**     * 渲染视图之后被调用. 释放资源     */    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,                                Object handler, @Nullable Exception ex) throws Exception {        System.out.println("afterCompletion");    }}

2. 编写配置文件

在 springmvc 的配置文件中配置拦截器

<mvc:interceptors>    <!--自定义拦截器-->    <bean class="com.maven.interceptors.FirstIntercept" id="firstIntercept"/></mvc:interceptors>

拦截器配置

可配置拦截需要拦截的链接和不拦截的链接

<mvc:interceptors>    <!--自定义拦截器-->    <bean class="com.maven.interceptors.FirstIntercept"/>    <mvc:interceptor>        <!--包含的路径-->        <mvc:mapping path="/test"/>        <!--不包含的路径 顺序不能颠倒 -->        <mvc:exclude-mapping path="/login"/>        <bean class="com.maven.interceptors.SecondInterceptor"/>    </mvc:interceptor></mvc:interceptors>

拦截器组顺序

  • preHandle 方法: 按配置的顺序执行
  • postHandle 方法: 按配置的逆序执行
  • afterCompletion 方法: 按配置的逆序执行

: 当在执行流程途中preHandle方法返回false的时候,前面执行过preHandle方法的拦截器要逆序执行afterCompletion方法

原创粉丝点击