什么是拦截器
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。但又不同于过滤器,拦截器是AOP思想的具体实现。
- 过滤器:servlet规范中的一部分,任何java web工程都可以使用,在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截
- 拦截器:SpringMVC框架特有的,只有使用了SpringMVC框架的工程才能使用,拦截器只拦截走到controller控制器的请求。静态资源不会拦截(jsp,html,css,js,image...)
实现拦截器
代码语言:javascript复制要实现拦截器,就要实现HandlerInterceptor接口,重写接口的三个方法,一般只需要preHandle方法足够了,在处理器调用前作用
COPYpublic class MyInterceptor implements HandlerInterceptor {
//在请求处理的方法之前执行
//如果返回true执行下一个拦截器
//如果返回false就不执行下一个拦截器,直接在这里卡死。
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("------------处理前------------");
return true;
}
//在请求处理方法执行之后执行
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("------------处理后------------");
}
//在dispatcherServlet处理后执行,做清理工作.
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("------------清理------------");
}
}
代码语言:javascript复制配置Spring-mvc.xml 注册拦截器
COPY<!--关于拦截器的配置-->
<mvc:interceptors>
<mvc:interceptor>
<!--/** 包括路径及其子路径-->
<!--/admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
<!--/admin/** 拦截的是/admin/下的所有路径,包括子路径的子路径...-->
<mvc:mapping path="/**"/>
<!--bean配置的就是拦截器-->
<bean class="top.hcode.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
总结
拦截器是AOP横切的具体实现,可用于登录验证等。