/**
* SpringMVC 拦截器
*
* 1、拦截去需要继承HandlerInterceptor
* 1.1、拦截器分别有三个方法 preHandle、postHandle、afterCompletion
* 1.1.1、首先执行preHandle方法,如果返回false,则下面的函数都不会执行,一般做日志和权限处理比较好
* 如果该方法执行返回false,则不会执行后面的流程
* 1.1.2、执行postHandle方法,在Controller调用目标方法之后渲染试图之前执行,如果调用目标方法有异常,则该方法不会被执行到
* 1.1.3、执行afterCompletion 在渲染视图之后执行,如果上面postHandle方法报异常,也会执行这个方法
*
* 2、指定拦截器特殊的路径
* 如:
* <mvc:interceptor>
<mvc:mapping path="/i18N"/>
<bean class="com.spring.test.MyInterceptor"></bean>
</mvc:interceptor>
*
* 通过:<mvc:mapping path="/i18N"/>指定拦截的路径,其余路径则不做限制
* 也可以通过:<mvc:exclude-mapping path=""/> 排除拦截路径
*
* 3、拦截器的顺序,按配置先后顺序执行,然后先正序再反序执行
* 不过是按照以下顺序执行
* preHandle1 ...
preHandle2 ...
* postHandle2 ...
postHandle1 ...
* afterCompletion2...
* afterCompletion1..
*
* @param locale
* @return
MyInterceptor类:
* SpringMVC 拦截器
*
* 1、拦截去需要继承HandlerInterceptor
* 1.1、拦截器分别有三个方法 preHandle、postHandle、afterCompletion
* 1.1.1、首先执行preHandle方法,如果返回false,则下面的函数都不会执行,一般做日志和权限处理比较好
* 如果该方法执行返回false,则不会执行后面的流程
* 1.1.2、执行postHandle方法,在Controller调用目标方法之后渲染试图之前执行,如果调用目标方法有异常,则该方法不会被执行到
* 1.1.3、执行afterCompletion 在渲染视图之后执行,如果上面postHandle方法报异常,也会执行这个方法
*
* 2、指定拦截器特殊的路径
* 如:
* <mvc:interceptor>
<mvc:mapping path="/i18N"/>
<bean class="com.spring.test.MyInterceptor"></bean>
</mvc:interceptor>
*
* 通过:<mvc:mapping path="/i18N"/>指定拦截的路径,其余路径则不做限制
* 也可以通过:<mvc:exclude-mapping path=""/> 排除拦截路径
*
* 3、拦截器的顺序,按配置先后顺序执行,然后先正序再反序执行
* 不过是按照以下顺序执行
* preHandle1 ...
preHandle2 ...
* postHandle2 ...
postHandle1 ...
* afterCompletion2...
* afterCompletion1..
*
* @param locale
* @return
*/
测试类:
/**
* SpringMVC 拦截器
*
* 1、拦截去需要继承HandlerInterceptor
* 1.1、拦截器分别有三个方法 preHandle、postHandle、afterCompletion
* 1.1.1、首先执行preHandle方法,如果返回false,则下面的函数都不会执行,一般做日志和权限处理比较好
* 如果该方法执行返回false,则不会执行后面的流程
* 1.1.2、执行postHandle方法,在Controller调用目标方法之后渲染试图之前执行,如果调用目标方法有异常,则该方法不会被执行到
* 1.1.3、执行afterCompletion 在渲染视图之后执行,如果上面postHandle方法报异常,也会执行这个方法
*
* 2、指定拦截器特殊的路径
* 如:
* <mvc:interceptor>
<mvc:mapping path="/i18N"/>
<bean class="com.spring.test.MyInterceptor"></bean>
</mvc:interceptor>
*
* 通过:<mvc:mapping path="/i18N"/>指定拦截的路径,其余路径则不做限制
* 也可以通过:<mvc:exclude-mapping path=""/> 排除拦截路径
*
* 3、拦截器的顺序,按配置先后顺序执行,然后先正序再反序执行
* 不过是按照以下顺序执行
* preHandle1 ...
preHandle2 ...
* postHandle2 ...
postHandle1 ...
* afterCompletion2...
* afterCompletion1..
*
* @param locale
* @return
*/
MyInterceptor类:
package com.spring.test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("afterCompletion ... ");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle ... ");
}
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("preHandle ... ");
return true;
}
}
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.spring.test" >
</context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:interceptors>
<bean class="com.spring.test.MyInterceptor"></bean>
<!--
指定拦截路径 -->
<mvc:interceptor>
<mvc:mapping path="/i18N"/>
<bean class="com.spring.test.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>
</beans>