SpringMVC中的Interceptor拦截器
拦截器作用:拦截用户的请求,判断请求是否合肥,如果是合法的请求可以被系统处理,否则终止执行
拦截器的执行时间点:在获取到处理器的适配器对象之后,在处理器方法执行之前,拦截用户的请求
拦截器是全局的,可以拦截所有的请求,一个程序可以0或多个拦截器
定义拦截器:
1.定义类实现拦截器的接口HandlerInterceptor
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//实现了HandlerInterceptor接口的类叫拦截器
public class MyInterceptor implements HandlerInterceptor {
/**
*预处理方法:在请求处理之前先执行的方法,用户的请求首先到达该方法,在这个方法中可以请求做判断,处理
* 参数:
* Object handler:处理器对象。
* 返回值boolean:
* true:请求能够处理,拦截器的afterCompletion能执行
* false:请求终止处理,拦截器的afterCompletion不能能执行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("MyInterceptor拦截器的preHandler()");
return true;
}
/**
*后处理方法:在处理器方法之后执行,最大的特点是能够获取到处理器方法的执行结果(ModelAndView)
* 作用是可以修改目标方法的执行结果,对处理结果做二次修改
* 参数:
* Object handler:处理器对象
* ModelAndView mv:处理器方法的执行结果
* 没有返回值
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor拦截器的postHandler()");
}
/**
*最后执行的方法:可以做资源回收,内存释放等收尾工作
* 在视图对象处理完成之后,执行的方法
* 参数:
* Object handler:处理器对象
* Exception ex:异常
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor拦截器的afterCompletion()");
}
}
2.在springmvc的配置文件中声明拦截器,指定拦截的url地址(mvc.xml)
<!-- 声明拦截器,指定拦截的url -->
<mvc:interceptors>
<!--第一个拦截器-->
<mvc:interceptor>
<!--拦截的url地址 -->
<mvc:mapping path="/**"/>
<!--指定的拦截对象-->
<bean class="com.wzcxlz.controller.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>