拦截器
是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强
SpringMVC拦截器实现过程
- 1.编写拦截器,实现 org.springframework.web.servlet.HandlerInterceptor 接口
- 2.将拦截器注册到SpringMVC中
<mvc:interceptors>
<bean class="com.xxx.interceptor.MyInterceptor" />
</mvc:interceptors>
- 3.配置拦截器的拦截规则(可不配置)
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/*"/>
<bean class="com.xxx.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
HandlerInterceptor
public interface HandlerInterceptor {
/**
* 返回false 请求被终止
*/
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;
void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;
void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;
}
HandlerInterceptor 拦截器链
多个拦截器按配置的顺序执行,但凡有一个返回false,请求返回;
<mvc:interceptors>
<bean class="com.xxx.interceptor.MyInterceptor" />
<bean class="com.xxx.interceptor.MyInterceptor2" />
<bean class="com.xxx.interceptor.MyInterceptor3" />
</mvc:interceptors>
使用场景
处理所有请求的共同问题
- 乱码问题
- 权限验证问题
- 等等
与过滤器的区别
过滤器依赖Servlet容器,基于回调函数,拦截范围更大;
拦截器依赖框架容器,基于反射机制,仅拦截请求;