SpringMVC拦截器详解

SpringMVC之拦截器


拦截器概述

1.1什么是拦截器(HandleUbterceper)

拦截器可以在目标方法执行之前进行一些拦截工作,或者在目标方法执行过后进行一些操作.在javaWeb的学习当中我们就学过了拦截器,当然在SpringMVC也为我们提供了新的拦截器,在本篇文章中我们就来研究SpringMVC中的拦截器.

1.2拦截器的定义

1.编写类实现HandlerInterceptor接口

2.继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。

3.通过实现WebRequestInterceptor接口

4.继承WebRequestInterceptor接口的实现类来定义。

栗子

下面我们以实现HandleInterceptor接口来举个栗子

public class SpringFilterTest implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("1....preHandle...执行了");
        return true;//当它为true时放行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("1....postHandle.....执行了");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("1....afterCompletion.....执行了");
    }
}

方法

preHandle()方法

preHande()方法会在控制器方法前进行调用,其返回值决定是否中断后续操作.返回值为true表示继续执行,返回值false表示中断后续操作(包括下一个拦截器或者控制器的方法执行)

postHandle()方法

postHandle()方法在目标方法执行后执行,且在视图解析器前执行,我们可以在此中对视图进行修改.

afterCompletion()方法

afterCompletion()方法在整个请求执行完毕后执行,既视图渲染完成后执行.我们可以记录一些日志,缓存清理等.

配置

在编写了自定义的拦截器后,拦截器并不能工作,现在的我们需要对拦截器进行配置

<mvc:interceptors>
    <!--会拦截所有Controller类的所有方法-->
    <bean class="net.Arenly.utils.FilterTest"></bean>
    <mvc:interceptor>
        <!--配置单方法拦截-->
        <mvc:mapping path="/test01"/>
        <bean class="net.Arleny.service.DownloadT"/>
    </mvc:interceptor>
    <mvc:interceptor>
        <!--拦截所有请求,排除拦截 /test01 请求-->
       <mvc:mapping path="/**"/>
     <mvc:exclude-mapping path="/test01"/>
       <bean class="net.Arleny.service.DownloadT"/>
     </mvc:interceptor>
</mvc:interceptors>

运行结果

1....preHandle...执行了
test执行了
1....postHandle.....执行了
页面执行了
1....afterCompletion.....执行了

通过控制台打印的数据我们可以看出来 preHandle放在在目标方法执行之前,postHandle在页面渲染之前,afterCompltion方法在页面渲染完成之后。


吾生也有涯,而知也无涯。——庄子

             					   微信号 : Arenly-
            		     		 bilibili : 爱无理取闹的猪
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值