Spring的Interceptor(拦截器)是Controller 方法级别的 当某一个Controller的方法进行request处理的时候 可以通过Interceptor进行拦截, 拦截器可以在方法执行之前, 方法执行完以后(返回ModelAndView) 以及执行完整个流程(直到渲染完View) 进行拦截
制作一个Interceptor需要实现org.springframework.web.servlet.HandlerInterceptor接口 他提供3个抽象方法 如下
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception:
执行Controllerf方法之前做处理 如果返回'true' 则继续执行, 如果返回'false' 则不再继续执行。handler为具体的Controller. 可以进行强制转换 如: WelcomeController controller = (WelcomeController) handler
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
执行完Controllerf方法 并且返回ModelAndView(还未进行View的处理)
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
整个操作流程执行完毕 包括渲染View
但是Spring已经提供了 org.springframework.web.servlet.handler.HandlerInterceptorAdapter抽象类来实现HandlerInterceptor接口 用来做适配器 我们只需要集成该适配器就可以了
public class WelcomeInterceptor extends HandlerInterceptorAdapter
Interceptor 需要配置在HandlerMapping上 该HandleMapping所映射的Controller全都会被该Interceptor拦截, 一个HandlerMapping可以配置多个Interceptor 做个HandlerMapping可以配置同一个Interceptor
示例:
制作一个Interceptor需要实现org.springframework.web.servlet.HandlerInterceptor接口 他提供3个抽象方法 如下
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception:
执行Controllerf方法之前做处理 如果返回'true' 则继续执行, 如果返回'false' 则不再继续执行。handler为具体的Controller. 可以进行强制转换 如: WelcomeController controller = (WelcomeController) handler
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
执行完Controllerf方法 并且返回ModelAndView(还未进行View的处理)
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
整个操作流程执行完毕 包括渲染View
但是Spring已经提供了 org.springframework.web.servlet.handler.HandlerInterceptorAdapter抽象类来实现HandlerInterceptor接口 用来做适配器 我们只需要集成该适配器就可以了
public class WelcomeInterceptor extends HandlerInterceptorAdapter
Interceptor 需要配置在HandlerMapping上 该HandleMapping所映射的Controller全都会被该Interceptor拦截, 一个HandlerMapping可以配置多个Interceptor 做个HandlerMapping可以配置同一个Interceptor
示例:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="welcomeInterceptor"/>
</list>
</property>
<property name="mappings">
<props>
<prop key="/welcome">welcomeController</prop>
</props>
</property>
<property name="order" value="0"/>
</bean>
<bean id="welcomeController" class="me.iace.spring.controller.WelcomeController" />