HandlerInterceptorAdapter的使用

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的

而在Spring中,基于Filter这种方式可以实现Bean预处理、后处理。 比如注入FilterRegistrationBean,然后在这个Bean上传递自己继承Filter实现的自定义Filter进入即可。

而Spring MVC也有拦截器,不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。

Spring MVC提供的org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。

它有三个方法:

preHandle:在方法被调用前执行。在该方法中可以做类似校验的功能。如果返回true,则继续调用下一个拦截器。如果返回false,则中断执行,也就是说我们想调用的方法不会被执行,但是你可以修改response为你想要的响应。
postHandle:在方法执行后生成视图之前执行(调用了Service并返回ModelAndView,但未进行页面渲染)。
afterCompletion:在整个请求处理完毕后进行回调,也就是说视图渲染完毕或者调用方已经拿到响应。 可用于清理资源、可以根据Exception 是否为null判断是否发生了异常日志记录等。

下面我们来看如何定义自己的拦截器:
XML配置:

<!--配置拦截器, 多个拦截器,顺序执行 -->  
<mvc:interceptors>    
    <mvc:interceptor>    
        <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller -->  
        <!-- 拦截所有请求 -->
		<mvc:mapping path="/**" />
		<!-- 排除路径, mvc:exclude-mapping标签不被spring-mvc-3.0.xsd支持, 
				 该配置在spring-mvc-3.2.xsd中. -->
		<mvc:exclude-mapping path="/js/**" />
		<mvc:exclude-mapping path="/css/**" />
		<mvc:exclude-mapping path="/images/**" />
		<mvc:exclude-mapping path="/download/**" />
        <bean class="com.alibaba.interceptor.ClientInterceptor"></bean>    
    </mvc:interceptor>  
    <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->  
</mvc:interceptors>

ClientInterceptor拦截器:

public class ClientInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
    }
}

修改对应的方法为你想要的样子即可。

  • request:在该参数中可以获取到和请求相关的信息。比如是否为get请求等。
  • response:在该参数中可以获取对象的响应信息。
  • handler:该参数中包含了对应方法的信息。比如:方法中的参数类型、参数的注解、方法的注解等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值