interview
springboot
在 Spring Boot 中你是怎么使用拦截器的

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

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

QA

Step 1

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

A:: 在 Spring Boot 中,拦截器通常用于预处理和后处理 HTTP 请求。要使用拦截器,首先需要实现 HandlerInterceptor 接口,然后在配置类中注册拦截器。具体步骤如下:

1. 创建一个类实现 HandlerInterceptor 接口,并覆盖 preHandle、postHandle 和 afterCompletion 方法。

 
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理之前执行
        return true;
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理之后但在视图渲染之前执行
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在整个请求结束之后执行
    }
}
 

2. 在配置类中注册拦截器。

 
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/api/**");
    }
}
 

这样就可以在指定路径上使用拦截器来处理请求了。

Step 2

Q:: 如何在 Spring Boot 中使用拦截器实现用户认证?

A:: 在 Spring Boot 中使用拦截器实现用户认证通常涉及检查请求头中的认证信息,并在 preHandle 方法中进行用户认证。具体步骤如下:

1. 创建一个认证拦截器,实现 HandlerInterceptor 接口。

 
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("Authorization");
        if (token != null && validateToken(token)) {
            return true;
        } else {
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return false;
        }
    }
 
    private boolean validateToken(String token) {
        // 执行 token 验证逻辑
        return true;
    }
}
 

2. 在配置类中注册认证拦截器。

 
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/secure/**");
    }
}
 

这样,当访问 /secure/** 路径时,拦截器将检查请求头中的 Authorization 信息并进行验证。

用途

拦截器在 Spring Boot 中非常有用,特别是在实现跨切面功能(如日志记录、身份验证、权限控制等)时。它们允许开发者在不改变控制器代码的情况下,对请求进行预处理和后处理。比如,在企业级应用中,通常需要对所有进入系统的请求进行身份验证,这时拦截器就非常有用了。\n

相关问题

🦆
什么是 Spring Boot Starter?

Spring Boot Starter 是一组方便的依赖描述符,可以轻松地将常见功能(如 JPA、Web、Security 等)添加到 Spring Boot 项目中。它们通常以 spring-boot-starter-<name> 的形式命名,并包含了所有必需的依赖,以减少配置的复杂性。

🦆
Spring Boot 中如何进行全局异常处理?

在 Spring Boot 中,可以使用 @ControllerAdvice 注解和 @ExceptionHandler 注解来实现全局异常处理。@ControllerAdvice 类用于定义全局的异常处理方法,而 @ExceptionHandler 注解则用于标注具体的异常处理方法。通过这种方式,可以捕获和处理控制器层抛出的所有异常,并统一返回错误响应。

🦆
Spring Boot 中如何进行日志管理?

Spring Boot 提供了对多种日志框架的支持,如 Logback、Log4j2 和 Java Util Logging。默认情况下,Spring Boot 使用 Logback 作为日志框架。可以通过 application.properties 或 application.yml 文件配置日志级别、日志文件位置等。还可以自定义 Logback 配置文件来实现更复杂的日志需求。