Spring Boot REST安全认证核心是无状态、基于Token、分层拦截;主流方案含API Key(轻量级调用方识别)、JWT(推荐,自包含签名Token)、Spring Security(中大型项目,权限精细控制)及AOP切面(补充校验)。

Spring Boot 中对 REST 接口做安全认证,核心思路是:**无状态、基于 Token、分层拦截**。不依赖 Session,适合前后端分离场景;主流方案有 API Key、JWT、Basic Auth 和 Spring Security 框架集成,选型取决于项目规模和安全要求。
API Key 简单校验(适合内部服务或轻量级接口)
适用于不需要用户粒度权限、仅需区分调用方身份的场景,比如第三方系统对接、运维健康检查接口。
- 在请求头(如 X-API-Key)或查询参数中传入固定密钥
- 自定义 Filter 提前拦截,比 Controller 更早执行,性能开销小
- 密钥可存于配置文件或数据库,支持动态启用/禁用,便于灰度或紧急下线
- 注意:密钥不能硬编码,应通过 application.yml 或环境变量注入,并定期轮换
JWT 认证(推荐大多数业务系统)
JWT 是目前最常用、平衡安全性与开发效率的方案,Token 自包含、可签名、无需服务端存储会话。
- 用户登录成功后,服务端生成 JWT(含用户 ID、角色、过期时间等),返回给前端
- 后续请求在 Authorization: Bearer
头中携带 - 自定义 JwtAuthenticationFilter 解析并校验签名、有效期、黑名单(如登出缓存)
- 配合 SecurityFilterChain 配置路径放行(如
/api/public/**)和受保护资源 - 建议使用 jjwt-api + jjwt-impl + jjwt-jackson(新版推荐)
Spring Security 框架集成(适合中大型、权限复杂项目)
不是“重”,而是结构清晰、扩展性强。它本质是一条过滤器链,你可以只启用需要的部分。
- 引入 spring-boot-starter-security 后,默认所有接口受 Basic Auth 保护,需先禁用或覆盖
- 通过 @EnableWebSecurity 配置类定制 SecurityFilterChain,明确哪些路径免认证、哪些需角色权限
- 可结合 Method Security(如
@PreAuthorize("hasRole('ADMIN')"))做细粒度方法级控制 - 若已有用户体系,可实现 UserDetailsService 加载用户信息,搭配密码编码器(
PasswordEncoder) - 注意关闭 CSRF(
.csrf().disable()),REST 接口默认无状态,不适用会话型防护
自定义 AOP 切面认证(适合灵活插拔、低侵入增强)
不替换主认证流程,而是作为补充,比如对特定接口加二次校验、租户隔离、操作审计等。
- 定义注解如 @Authorized,标注在 Controller 方法或类上
- 编写 @Aspect 切面,在 @Before 中读取 token、查 Redis 白名单、校验业务规则
- 失败时抛出统一异常(如
AccessDeniedException),由 @ControllerAdvice 统一返回 JSON 错误格式 - 优势是逻辑解耦、复用方便;但注意它晚于 Filter 和 Interceptor 执行,不能替代基础鉴权











