使用Spring Security实现基础REST API安全 | 作者:Santiago - Medium

作者:API传播员 · 2026-01-11 · 阅读时间:5分钟

在本项目中,我们将使用 Spring Security 在 Spring Boot 应用程序中实现基础的 REST API 安全性。本文重点在于简单性,为未来更复杂的安全配置奠定基础。


基础安全配置概述

在本项目中,我们创建了一个名为 WebSecurityConfiguration 的安全配置类,位于 com.security.security.config 包中。此类通过 @Configuration@EnableWebSecurity 注解标注,表明其用于定义应用程序的安全设置。

WebSecurityConfiguration 类中,我们定义了一个自定义的 HttpSecurity 对象,通过 filterChain 方法进行配置。以下是该配置的关键点:

  • 禁用 CSRF 保护:为了简化操作并满足无状态 API 的需求,我们禁用了跨站点请求伪造(CSRF)保护。这种做法在基于令牌的 REST API 中非常常见。
  • 限制访问权限:配置要求对所有请求进行身份验证,确保所有端点都受到保护,仅允许经过身份验证的用户访问。
  • 启用基本身份验证:选择 HTTP Basic Authentication 作为身份验证方法,便于初始设置和测试。
  • 无状态会话管理:将会话管理策略设置为无状态,适用于 RESTful API,其中每个请求都是独立的,不依赖会话状态。

此外,我们在 application.properties 文件中定义了默认的身份验证凭据(用户名为 admin,密码为 password),以便快速测试安全配置,而无需复杂的数据库或外部身份验证服务。


技术栈

  • Spring Boot
  • Spring Security

要开始配置 Spring Security,需要在项目的 build.gradle 文件中添加以下依赖项:

implementation 'org.springframework.boot:spring-boot-starter-security'

配置步骤

1. 创建 WebSecurityConfiguration

在添加必要依赖项后,下一步是创建一个配置类,用于定义应用程序的安全设置。以下是完整代码:

package com.security.security.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;import static org.springframework.security.config.Customizer.withDefaults;@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration {    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf(csrf -> csrf.disable())
            .authorizeRequests(authorize -> authorize
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults())
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
        return http.build();
    }
}

2. 配置 application.properties 文件

创建 application.properties 文件并添加以下内容:

spring.security.user.name=admin
spring.security.user.password=password

这些设置定义了默认的用户名和密码,用于 HTTP 基本身份验证。


配置详解

CSRF 保护

.csrf(csrf -> csrf.disable())

禁用 CSRF 保护是 REST API 的常见做法,尤其是在使用基于令牌的身份验证时。REST API 的无状态特性使得传统的 CSRF 攻击难以奏效,因此可以安全地禁用此功能。

请求授权

.authorizeRequests(authorize -> authorize.anyRequest().authenticated())

此配置确保所有请求都需要经过身份验证,保护应用程序的每个端点。

HTTP 基本身份验证

.httpBasic(withDefaults())

启用 HTTP 基本身份验证,适合简单的测试和开发场景。

无状态会话管理

.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

将会话管理策略设置为无状态,确保每个请求都是独立的,不依赖于服务器端的会话状态。


测试安全配置

配置完成后,可以使用以下 cURL 命令测试受保护的端点:

curl -u admin:password -X GET http://localhost:8080/pet -H "Accept: application/json"

如果配置正确,该命令将返回应用程序中的宠物列表,表明安全设置已成功生效。


总结

通过本文的配置,我们实现了 Spring Boot 应用程序的基础安全设置,包括禁用 CSRF 保护、启用 HTTP 基本身份验证、限制访问权限以及无状态会话管理。这些设置为 REST API 的安全性提供了一个良好的起点。

在实际项目中,可以根据需求扩展此配置,例如集成数据库或外部身份验证服务,进一步增强安全性。

原文链接: https://medium.com/@barbieri.santiago/basic-rest-api-security-with-spring-security-9f5d3a254af8