Spring MVC Restful API的拦截
Spring MVC Restful API的拦截机制的实现有:过滤器Filter、拦截器Interceptor、切片Aspect。接下来会为大家介绍这三种拦截机制的具体实现。
工具/原料
IntelliJ IDEA
过滤器Filter
1、首先创建一个过滤器TimeFilter,这个过滤器实现了Filter接口,有三个默认的方法,分别是init(FilterConfig arg0)、destroy()、doFilter(ServletRequest request, ServletResponse response, FilterChain chain),其中doFilter是真正实现拦截操作的。
2、如果想让过滤器TimeFilter起作用,只需要在TimeFilter类的上面加上@Componet注解即可。如果不使用@Componet注解,那么如何使用过滤器呢?我们创建一个WebConfig类,这个类继承WebMvcConfigurerAdapter,我们创建一个FilterRegistrationBean,加入Filter的配置,需要注意url的过滤规则。缺点是:只能拿到http的请求和响应,并不知道是哪个控制器哪个方法处理的。
拦截器Interceptor
1、拦截器Interceptor是Spring框架本身实现的,我们创建一个类TimeInterceptor,这个类实现Hand造婷用痃lerInterceptor的接口,我们通过这种方式定义一个拦截器,这个拦截器默认的方法有:preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)、postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)、afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex),我们根据需要写具体的实现,无论方法是否抛出异常都会走到afterCompletion,preHandle如果返回false则不会调用后面的方法。
2、拦截器Interceptor要想起作用,只在类上添加@Component注解是不够的,我们还需要额外的配置。我们依旧使用WebConfig类,这个类继承WebMvcConfigurerAdapter,addInterceptors方法注册拦截器。
切片Aspect
1、Spring中的切片Aspect拦截,我们在定义切点的时候设置拦截规则,例如拦截所有UserController的方法等。在切片类上使用@Aspec和@Component注解即可生效。