springmvc中的拦截器interceptor类似于web开发中的filter,一般用于处理器的方法进行预处理和后
处理
拦截器(interceptor)与过滤器(filter)的区别
过滤器(filter)
Filter属于Servlet技术,只要是web工程都可以使用
filter主要由于对所有请求过滤
Filter的执行时机早于Interceptor
拦截器(interceptor)
Interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
Interceptor通常由于对处理器Controller进行拦截
Interceptor只能拦截dispatcherServlet处理的请求
编写一个拦截器
实现HandlerInterceptor接口,可根据选择重写preHandle,postHandle,afterCompletion方法
package com.gx.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 MyInterceptor1 implements HandlerInterceptor
{
/**
* 作用: 用于对拦截到的请求进行预处理,方法接收布尔(true,false)类型的返回值,返回
true:放行,false:不放行。
* 执行时机:在处理器方法执行前执行
* @param request 请求对象
* @param response 响应对象
* @param handler 拦截到的处理器方法
* @return 布尔值 true:放行,false:不放行
* @throws Exception 抛出的异常信息
*/@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("MyInterceptor1 preHandle \t"+handler);
return true;//放行
}
/**
* 作用: 用于对拦截到的请求进行后处理,可以在方法中对模型数据和视图进行修改
* 执行时机: 在处理器的方法执行后,视图渲染之前
* @param request 请求对象
* @param response 响应对象
* @param handler 拦截到的处理器方法
* @param modelAndView 处理器方法返回的模型和视图对象,可以在方法中修改模型和视图
* @throws Exception 抛出的异常信息
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor1 postHandle \t"+handler+";视
图:"+modelAndView.getViewName()
+";Model:"+modelAndView.getModel());
}
/**
* 作用: 用于在整个流程完成之后进行最后的处理,如果请求流程中有异常,可以在方法中获取
对象
* 执行时机: 视图渲染完成后(整个流程结束之后)
* @param request 请求对象
* @param response 响应对象
* @param handler 拦截到的处理器方法
* @param ex 异常信息
* @throws Exception 抛出的异常信息
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor1 afterCompletion \t"+handler);
}
}
在select中配置拦截器
拦截器方法说明
preHandle方法
作用: 用于对拦截到的请求进行预处理,方法接收布尔(true,false)类型的返回值,返回
true:放行,false:不放行。
执行时机: 在处理器方法执行前执行
方法参数:
1. request 请求对象
2. response 响应对象
3. handler 拦截到的处理器方法
postHandle方法
作用: 用于对拦截到的请求进行后处理,可以在方法中对模型数据和视图进行修改
执行时机: 在处理器的方法执行后,视图渲染之前
方法参数:
1. request 请求对象
2. response 响应对象
3. handler 拦截到的处理器方法
4. ModelAndView 处理器方法返回的模型和视图对象,可以在方法中修改模型和视图
afterCompletion方法
作用: 用于在整个流程完成之后进行最后的处理,如果请求流程中有异常,可以在方法中
获取对象
执行时机: 视图渲染完成后(整个流程结束之后)
方法参数:
1. request 请求参数
2. response 响应对象
3. handler 拦截到的处理器方法
4. ex 异常对象