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 中如何进行全局异常处理?▷
🦆
Spring Boot 中如何进行日志管理?▷