SpringMVC提供的拦截器就类似于Servlet-api中的过滤器,可以对控制器的请求进行拦截实现相关的预处理和后处理。
拦截器是SpringMVC框架的实现,只有在SpringMVC框架中才能使用。在SpringMVC配置文件进行配置,不会拦截SpringMVC放行的资源(jsp\html\css..)。
将多个拦截器按照一定的顺序构成一个执行链。
拦截器介绍
SpringMVC提供的拦截器就类似于Servlet-api中的过滤器,可以对控制器的请求进行拦截实现相关的预处理和后处理。
- 过滤器
- 是Servlet规范的一部分,所有的web项目都可以使用
- 过滤器在web.xml配置(可以使用注解),能够拦截所有web请求
- 拦截器
- 是SpringMVC框架的实现,只有在SpringMVC框架中才能使用
- 拦截器在SpringMVC配置文件进行配置,不会拦截SpringMVC放行的资源(jsp\html\css..)
自定义拦截器
1. 创建拦截器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class MyInterceptor1 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("--------------预处理"); Enumeration<String> keys = request.getParameterNames(); while (keys.hasMoreElements()){ String key = keys.nextElement(); if("bookId".equals(key)){ return true; } } response.setStatus(400); return false; }
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { modelAndView.addObject("tips","这是通过拦截器的后处理添加的数据"); System.out.println("--------------后处理"); } }
|
2. 配置拦截器
1 2 3 4 5 6 7 8 9 10
| <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/book/query"/> <mvc:mapping path="/book/add"/> <mvc:mapping path="/student/**"/> <mvc:exclude-mapping path="/student/add"/> <bean class="cc.gaojie.utils.MyInterceptor1"/> </mvc:interceptor> </mvc:interceptors>
|
拦截器链
将多个拦截器按照一定的顺序构成一个执行链。