面试题:在 Spring Boot 中你是怎么使用拦截器的?

在 Spring Boot 中使用拦截器(Interceptor)通常用于在请求处理的前后执行一些逻辑,比如日志记录、权限验证等。以下是使用拦截器的步骤:

1. 创建拦截器类

首先,你需要创建一个实现 HandlerInterceptor 接口的拦截器类。这个接口有三个方法:

  • preHandle:在请求处理之前执行。
  • postHandle:在请求处理之后、视图渲染之前执行。
  • afterCompletion:在请求完成之后执行,通常用于资源清理。
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理之前执行
        System.out.println("Pre Handle method is Calling");
        return true; // 返回 true 继续执行,返回 false 中断请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理之后、视图渲染之前执行
        System.out.println("Post Handle method is Calling");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求完成之后执行
        System.out.println("After Completion method is Calling");
    }
}

2. 注册拦截器

接下来,你需要将拦截器注册到 Spring Boot 的拦截器链中。可以通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法来完成。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private CustomInterceptor customInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(customInterceptor)
                .addPathPatterns("/**") // 拦截所有路径
                .excludePathPatterns("/public/**"); // 排除特定路径
    }
}

3. 配置拦截路径

addInterceptors 方法中,你可以通过 addPathPatternsexcludePathPatterns 方法来配置拦截器拦截哪些路径以及排除哪些路径。

  • addPathPatterns("/**"):表示拦截所有路径。
  • excludePathPatterns("/public/**"):表示排除 /public/ 路径下的所有请求。

4. 运行应用

启动 Spring Boot 应用后,拦截器会自动生效。当请求进入时,拦截器会按照配置的路径进行拦截,并执行相应的逻辑。

总结

在 Spring Boot 中使用拦截器的步骤主要包括:

  1. 创建一个实现 HandlerInterceptor 接口的拦截器类。
  2. 通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法来注册拦截器。
  3. 配置拦截器的路径和排除路径。

拦截器非常适合用于处理跨切面的逻辑,如日志记录、权限验证、请求参数处理等。

THE END
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容