Spring Security 教程(26)、运行时环境

Tomcat 嵌入式容器

runtime-env 配图
runtime-env 配图
runtime-env 配图

Spring Boot 内嵌 Tomcat 是最常见的部署方式。配置简单,开箱即用:

1
2
3
4
5
6
@SpringBootApplication
public class SecurityApplication {
public static void main(String[] args) {
SpringApplication.run(SecurityApplication.class, args);
}
}
1
2
3
4
5
6
7
8
# application.yml
server:
port: 8080
spring:
security:
user:
name: admin
password: password

Spring Boot Starter 的配置

Spring Boot 提供了 spring-boot-starter-security,自动配置 Spring Security:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Boot 会自动:

  1. 创建 SecurityFilterChain Bean
  2. 启用 CSRF 防护
  3. 生成默认用户(用户名 user,随机密码输出到日志)
  4. 配置默认的表单登录和登出

自定义配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.requestMatchers("/api/**").authenticated()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll()
)
.csrf(csrf -> csrf.disable());
return http.build();
}
}

Spring Cloud Gateway 中的安全

Spring Cloud Gateway 作为 API 网关,需要额外的安全配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Bean
public SecurityWebFilterChain springSecurityFilterChain(
ServerHttpSecurity http) {
return http
.authorizeExchange(exchanges -> exchanges
.pathMatchers("/public/**").permitAll()
.pathMatchers("/admin/**").hasRole("ADMIN")
.anyExchange().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2
.jwt(Customizer.withDefaults())
)
.build();
}

不同环境的安全配置差异

环境 注意事项
Tomcat 嵌入式 使用 WebSecurityConfigurerAdapter,注意 Session 管理
Spring Boot 使用 spring-boot-starter-security,注意自动配置顺序
Spring Cloud Gateway 使用 SecurityWebFilterChain,Reactive 安全模型
Jetty 类似 Tomcat,但注意 JSP 支持配置
Undertow 类似 Tomcat,注意 Undertow 的特殊安全配置

生产环境的安全检查清单

  • 启用 HTTPS(SSL/TLS)
  • 配置 CSRF 防护(API 场景除外)
  • 设置合适的 Session 超时时间
  • 启用安全响应头(HSTS、X-Frame-Options 等)
  • 配置密码强度校验
  • 启用登录失败锁定
  • 定期升级 Spring Security 版本