跳到主要内容
版本:7.0.2

Hello Spring Security

DeepSeek V3 中英对照 Getting Started Hello Spring Security

本节介绍了如何将 Spring Security 与 Spring Boot 结合使用的最低配置要求,并指引您后续的操作步骤。

备注

完整的入门应用程序可以在 我们的示例仓库 中找到。为了方便起见,你可以下载一个由 Spring Initializr 准备的 最小化 Spring Boot + Spring Security 应用程序

更新依赖项

首先,您需要将 Spring Security 添加到应用程序的类路径中;有两种方法可以实现:使用 MavenGradle

启动 Hello Spring Security Boot

当 Spring Security 位于类路径中时,你现在可以运行 Spring Boot 应用程序。以下代码片段展示了部分输出内容,表明 Spring Security 已在你的应用程序中启用:

$ ./mvnw spring-boot:run
...
INFO 23689 --- [ restartedMain] .s.s.UserDetailsServiceAutoConfiguration :

Using generated security password: 8e557245-73e2-4286-969a-ff57fe326336

...

现在你已经让它运行起来了,可以尝试访问一个端点看看会发生什么。如果你在没有凭证的情况下访问端点,例如:

$ curl -i http://localhost:8080/some/path
HTTP/1.1 401
...

随后 Spring Security 会以 401 Unauthorized 拒绝访问。

提示

如果你在浏览器中提供相同的 URL,它将会重定向到默认的登录页面。

如果你使用凭据(在控制台输出中找到)访问端点,如下所示:

$ curl -i -u user:8e557245-73e2-4286-969a-ff57fe326336 http://localhost:8080/some/path
HTTP/1.1 404
...

随后 Spring Boot 将处理该请求,由于 /some/path 路径不存在,此时会返回 404 Not Found 状态码。

从这里,您可以:

运行时预期

Spring Boot与Spring Security的默认配置在运行时提供了以下行为:

理解 Spring Boot 如何与 Spring Security 协同实现这一功能会很有帮助。查看 Boot 的安全自动配置,它执行以下操作(为便于说明已简化):

@EnableWebSecurity 1
@Configuration
public class DefaultSecurityConfig {
@Bean
@ConditionalOnMissingBean(UserDetailsService.class)
InMemoryUserDetailsManager inMemoryUserDetailsManager() { 2
String generatedPassword = // ...;
return new InMemoryUserDetailsManager(User.withUsername("user")
.password(generatedPassword).roles("USER").build());
}

@Bean
@ConditionalOnMissingBean(AuthenticationEventPublisher.class)
DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(ApplicationEventPublisher delegate) { 3
return new DefaultAuthenticationEventPublisher(delegate);
}
}
  1. 添加 @EnableWebSecurity 注解。(除其他功能外,该注解会将 Spring Security 的默认过滤器链 作为 @Bean 发布)

  2. 发布一个 UserDetailsService @Bean,其用户名为 user,并带有一个随机生成且会输出到控制台的密码

  3. 发布一个 AuthenticationEventPublisher @Bean,用于发布身份验证事件

备注

Spring Boot 会将任何发布为 @BeanFilter 添加到应用程序的过滤器链中。这意味着在 Spring Boot 中使用 @EnableWebSecurity 会自动为每个请求注册 Spring Security 的过滤器链。

安全用例

从这里出发,您可能有许多方向可以选择。为了确定您和您的应用程序的下一步,请考虑以下 Spring Security 旨在解决的常见用例:

如果以上都不符合您的需求,请按以下顺序思考您的应用场景:

  1. 协议:首先,考虑你的应用程序将使用何种协议进行通信。对于基于 servlet 的应用程序,Spring Security 支持 HTTP 以及 Websockets

  2. 认证:接下来,考虑用户将如何进行认证,以及该认证是有状态的还是无状态的。

  3. 授权:然后,考虑你将如何确定用户被授权执行哪些操作

  4. 防御:最后,集成 Spring Security 的默认保护措施,并考虑你需要哪些额外的保护措施