Spring Boot 拦截 Token 处理方法

在现代 web 开发中,保护 API 接口和用户信息是至关重要的。使用 Token 的认证方式是常见方法之一。在 Spring Boot 中,我们可以通过拦截器来处理 Token 的认证。本文将带你一步步了解如何在 Spring Boot 中实现 Token 的拦截处理。

实现流程

为了更好地理解代码,下面是实现 Token 拦截器处理的流程:

步骤描述
1创建自定义拦截器
2在 Spring Boot 中注册拦截器
3编写 Token 验证的逻辑
4测试 API 接口

接下来,我们将逐步介绍每一个步骤。

1. 创建自定义拦截器

首先,我们需要创建一个自定义的拦截器来处理 Token。在 Spring Boot 中,拦截器需要实现 HandlerInterceptor 接口。

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class TokenInterceptor implements HandlerInterceptor {

    // 在请求处理之前调用
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("Authorization"); // 从请求头获取 token

        if (token == null || !isValidToken(token)) { // 验证 token 是否有效
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 设置返回401状态
            return false; // 阻止请求继续
        }
        return true; // 继续请求
    }

    // 验证 token 的逻辑(示例)
    private boolean isValidToken(String token) {
        // 在此处加入 Token 验证的具体逻辑
        return "valid-token".equals(token); // 示例:简单字符串比较
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

代码解析:

  • TokenInterceptor 类实现了 HandlerInterceptor 接口。
  • preHandle 方法在请求处理之前被调用,并提取请求头中的 Token 进行验证。
  • 如果 Token 无效,返回 401 状态,如果有效,则继续处理请求。
2. 在 Spring Boot 中注册拦截器

拦截器创建后,接下来需要在 Spring Boot 的配置类中注册这个拦截器。

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 TokenInterceptor tokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor) // 注册 TokenInterceptor
                .addPathPatterns("/api/**") // 拦截所有以 /api/ 开头的请求
                .excludePathPatterns("/api/auth/**"); // 排除认证相关接口
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

代码解析:

  • WebConfig 类实现了 WebMvcConfigurer 接口。
  • addInterceptors 方法中,注册了 TokenInterceptor 并设置拦截路径。
3. 编写 Token 验证的逻辑

TokenInterceptor 中,我们已经添加了一个简单的 Token 验证逻辑。但是在实际项目中,你可能需要从数据库或外部服务中验证 Token。可以通过增加服务类来处理复杂的 Token 验证。

import org.springframework.stereotype.Service;

@Service
public class TokenService {

    public boolean validateToken(String token) {
        // 模拟从数据库或者外部系统验证逻辑
        // 返回 true 表示有效,false 表示无效
        return "valid-token".equals(token); // 示例逻辑
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

代码解析:

  • TokenService 类中实现了一种简单的 Token 验证逻辑,实际应用中可以替换为复杂的校验。
4. 测试 API 接口

到这里,我们的 Token 拦截器已经写好了。可以创建一个简单的 Controller 来测试:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/api/test")
    public String testApi() {
        return "Token is valid, you have access!";
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

代码解析:

  • TestController 中定义了一个简单的 API 接口 /api/test,只有提供有效 Token 的请求才会通过拦截。
测试流程

你可以使用工具如 Postman 测试接口:

  • 请求 /api/test 时,不带 Token,应该返回 401 未授权。
  • 带上有效 Token Authorization: valid-token 问题返回正常内容。
API 请求成功率 70% 30% API 请求成功率 成功请求 未授权请求
总结

通过上述步骤,我们实现了 Spring Boot 中 Token 的拦截与处理。这是实现 API 安全的重要方式,确保只有通过认证的用户才能访问接口。在实际项目中,可以结合数据库、OAuth 等多种方案来实现更复杂的 Token 认证逻辑。

希望通过这篇文章你能对 Spring Boot 的拦截器有更深入的理解,能够灵活运用在你的项目中!如有问题,欢迎随时询问。