Spring Boot之拦截器原理与使用场景

Posted 爱上口袋的天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot之拦截器原理与使用场景相关的知识,希望对你有一定的参考价值。

1.什么是拦截器

        拦截器的主要是基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在Service或者一个方法前调用一个方法,或者在方法后调用一个方法,甚至在抛出异常的时候做业务逻辑的操作。

        拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理。在Spring MVC 与Spring Boot 中使用拦截器一般是实现HandlerInterceptor 接口。

HandlerInterceptor 接口提供了三个方法。下面分别对这三个方法作具体介绍。

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():这个方法可以实现处理器的预处理,也就是它会在handler 方法执行之前就开始执行。当返回值是true 时表示继续执行,返回false 时则不会执行后续的拦截器或处理器。作用:身份验证,身份授权等
  • postHandle():这个方法是后处理回调方法,也就是在控制器完成后(试图渲染之前)执行。作用:将公用的模型数据传到视图,也可以在这里统一指定视图(菜单导航等)
  • afterCompletion():这个方法是请求处理完毕后的回调方法,即在视图渲染完毕时调用。作用:进行统一的异常处理,日志处理等

2、拦截器特点 

1.请求到达经过拦截器,响应回来也经过拦截器
2.只能拦截控制器相关请求不能拦截JSP请求
3.拦截器可以中断用户请求轨迹


3、拦截器作用

将多个控制器中共有代码放入拦截器可以减少控制器代码冗余 

4、springmvc中开发拦截器步骤

1.实现HandlerInterceptor接口(或继承其实现类)或者实现WebRequestInterceptor(或继承其实现类)。
2.XML文件中配置拦截器 


5、springboot中使用拦截器

在springboot中开发拦截器与mvc中类似,只是用注解代替了xml文件配置。

自定义配置器:

然后实现WebMvcConfigurer配置器
以前一般继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter类,不过SrpingBoot 2.0以上WebMvcConfigurerAdapter类就过时了。有以下2中替代方法:
1.直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。(推荐)
2.继承org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport类。但是WebMvcConfigurationSupport覆盖了@EnableAutoConfiguration里的所有方法每个方法都需要重写继承并且WebMvcConfigurationSupport会让SpringBoot对mvc的自动配置失效。不过目前大多数项目是前后端分离,并没有对静态资源有自动配置的需求,所以继承WebMvcConfigurationSupport也未尝不可(不推荐,会导致一些莫名其妙的问题)。

 

 


6、使用场景

拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:

  • 登录验证,判断用户是否登录。
  • 权限检查:判断用户是否有权限访问资源,如校验token
  • 日志记录:记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
  • 性能检测:慢日志等记录时间的场景;

以上是关于Spring Boot之拦截器原理与使用场景的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中使用拦截器

Spring Boot之拦截器与过滤器(完整版)

spring boot 项目登录模块之身份验证

Spring Boot 2从入门到入坟 | Web场景开发篇:源码分析之静态资源配置原理

(021)Spring Boot之拦截器HandlerInterceptor

Spring Boot拦截器使用和常用功能统一封装