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>

 

posted @ 2016-09-28 15:44  冰封绝恋  阅读(273)  评论(0编辑  收藏  举报