SpringBoot面试题, 在 Spring Boot 中你是怎么使用拦截器的?
SpringBoot面试题, 在 Spring Boot 中你是怎么使用拦截器的?
QA
Step 1
Q:: 在 Spring Boot 中你是怎么使用拦截器的?
A:: 在 Spring Boot 中,拦截器通常用于在请求到达控制器之前或响应返回客户端之前执行一些操作。要使用拦截器,首先需要创建一个实现 HandlerInterceptor 接口的类,然后在类中实现 preHandle、postHandle 和 afterCompletion 方法。接着,需要在配置类中注册拦截器,通常通过实现 WebMvcConfigurer 接口的 addInterceptors 方法来实现。在 addInterceptors 方法中,您可以将拦截器添加到 InterceptorRegistry 中,并可以通过配置路径模式来指定哪些请求需要被拦截。例如,您可以选择对所有请求应用拦截器,也可以只对特定的 URL 模式应用拦截器。
Step 2
Q:: Spring Boot 中的拦截器与过滤器有何不同?
A:: 拦截器与过滤器的主要区别在于它们工作的层次不同。拦截器属于 Spring MVC 的一部分,通常用于在请求到达控制器之前或响应返回客户端之前执行一些操作,它可以访问 Controller 和 ModelAndView。过滤器属于 Servlet 规范的一部分,工作于更底层的 Servlet 层,通常用于在请求到达 Servlet 之前或响应返回客户端之前进行一些操作。过滤器通常用于处理跨域问题、编码问题或全局日志记录等任务,而拦截器则更适用于与 Spring 相关的操作,如权限校验、登录验证等。
Step 3
Q:: 如何在 Spring Boot 中配置多个拦截器?它们的执行顺序是如何确定的?
A:: 在 Spring Boot 中,可以通过在配置类中注册多个拦截器来配置多个拦截器。执行顺序是根据拦截器在 addInterceptors 方法中添加的顺序来确定的。Spring Boot 会按照拦截器的注册顺序依次调用 preHandle 方法,反向调用 postHandle 和 afterCompletion 方法。比如,如果拦截器 A 先于拦截器 B 被添加,则 A 的 preHandle 方法会先于 B 被调用,而 B 的 postHandle 和 afterCompletion 方法会先于 A 被调用。