拦截器
基本概念
1.拦截器和过滤器思想基本一致
2.Spring的HandlerMapping处理器支持拦截器应用,当需要为某些请求提供特殊功能时,例如对用户进行身份认证、登录检查等
3.拦截器必须实现HandlerInterceptor接口
4.HandlerInterceptor接口有以下3个方法
- preHandle():处理器执行前被调用。方法返回true表示会继续调用其他拦截器和处理器;返回false表示中断流程,不会执行后续拦截器和处理器
- postHandle():处理器执行后、视图处理前调用,含有ModelAndView可以传递数据
- afterCompletion():整个请求处理完毕后调用,含有ModelAndView可以传递数据
5.监听器、过滤器、拦截器顺序:监听>过滤>拦截
定义拦截器
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Interceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("pre1");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("post1");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("after1");
}
}
配置拦截器(springmvc配置文件)
- /*:代表拦截文件,如/index.html,不拦截文件夹如/index/
- /**:表示拦截所有,包含单个文件和文件夹
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/goods/**"/>
<bean class="com.kingdom.interceptor.Interceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.kingdom.interceptor.Interceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>