spring之interceptor篇
springmvc中要写一个拦截器非常的简单,有两种方式:要么实现HandlerInterceptor接口或者继承实现了该接口的类,如spring已经为我们写好的一个HandlerInterceptorAdaptor。HandlerInterceptor接口有三个方法preHandler、postHanderl、afterCompletion,不过一般拦截器只是在preHandler方法中实现,另外两个方法空实现,所以一般用继承HandlerInterceptorAdapter比较好。
方法介绍:
public boolean preHandle(HttpServletRequest req, HttpServletResponse res,
Object obj) 该方法有三个参数,返回值为布尔值,如果返回false,则该次请求结束,不会继续往下执行,obj其实就是一个包含请求调用方法的pojo。
public void postHandle(HttpServletRequest req, HttpServletResponse res,
Object obj, ModelAndView mav) 同样有三个方法,obj同上,mav是方法返回的试图,如果没有返回值,为null。
public void afterCompletion(HttpServletRequest req,
HttpServletResponse res, Object obj, Exception e) 一般不用
拦截器的配置:
首先继承HandlerInterceptorAdapter,定义自己的拦截器类,然后配置如下:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/charts/*"/> <bean class="springframe.interceptor.MyHandlerInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
或者
<mvc:interceptors> <bean class="springframe.interceptor.MyHandlerInterceptor"></bean> </mvc:interceptors>
拦截所有的请求。
或者使用SimpleUrlHandlerInterceptor配置
<beans...> ... <bean id="measurementInterceptor" class="com.apress.springrecipes.court.web.MeasurementInterceptor"/> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="measurementInterceptor"/> </list> </property> ... </bean> <bean class="org.springframework.web.servlet.mvc.support .ControllerClassNameHandlerMapping"> <property name="interceptors"> <list> <ref bean="measurementInterceptor"/> </list> </property> </bean> .... </beans>