前言:
上一篇介绍了,使用AOP的方式去拦截校验参数,本章讲解使用拦截器去校验参数,以及遇到的问题。
简介:
Spring web mvc 处理拦截器,就是案例所用到的去校验参数,类似与serlvet开发中里的filter过滤器。用于对拦截前及后处理。
常见场景:
日记记录、校验参数、权限检查等等。比喻我们在学习jdbc的时候,获取连接,最后关闭连接。其实本质也是AOP的方法(面向切面编程),也就是说符合AOP的横向切入点的功能都可以使用拦截器去实现。
一、拦截器类:
public interface HandlerInterceptor {
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;
}
preHandle:预处理回调方法,实现拦截器的预处理,第三个参数为响应的处理器;返回值:true表示继续流程;false表示流程中断(如校验失败,参数缺少),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理拦截器的后处理(返回请求结果之前)。
afterCompletion:整个请求处理完毕回调方法,在返回结果之后进行调用,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
二、拦截器适配器
有个场景,就是我们实现拦截器的时候只需要实现某个方法,或者不需要去实现全部的方法,可以使用拦截器的适配器类(使用了一种适配器模式的设计模式),允许我们只实现需要的方法。
public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {
/**
* This implementation always returns {@code true}.
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
/**
* This implementation is empty.
*/
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAnd