springMVC也有自己的拦截器:
SpringMVC要想实现拦截器,必须实现一个接口 HandlerInterceptor
第一步:编写拦截器类
package interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("拦截请求");
return true;//如果是true,则会放行,如果是false则会卡在这里
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("拦截响应");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("渲染完毕");
}
}
第二步:xml文件IOC容器中配置:
1.如果不写其他的东西,下面的默认拦截一切请求
<!--编写完拦截器后 需配置到springmvc中-->
<mvc:interceptors>
<bean class="interceptor.MyInterceptor"></bean>
</mvc:interceptors>
2.还可以指定拦截范围
<!--编写完拦截器后 需配置到springmvc中-->
<mvc:interceptors>
<mvc:interceptor>
<!--指定拦截的路径-->
<mvc:mapping path="/**"/>
<!--指定不拦截的路径-->
<mvc:exclude-mapping path="/handler/testUpload"/>
<bean class="interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
也可以配置多个拦截器:
<!--编写完拦截器后 需配置到springmvc中-->
<mvc:interceptors>
<!--如果 不额外配置 :默认拦截一切请求-->
<!--配置具体的拦截路径-->
<mvc:interceptor>
<!--指定拦截的路径-->
<mvc:mapping path="/**"/>
<!--指定不拦截的路径-->
<mvc:exclude-mapping path="/handler/testUpload"/>
<bean class="interceptor.MyInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<!--指定拦截的路径-->
<mvc:mapping path="/**"/>
<!--指定不拦截的路径-->
<mvc:exclude-mapping path="/handler/testUpload"/>
<bean class="interceptor.MySecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截的顺序: