自定义拦截器

自定义拦截器

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方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值