0 Tage Serie
java / expert
Snippet

Dynamische Sicherheitsfilterketten für Multi-Tenancy

Fortgeschrittene Spring Security nutzt mehrere SecurityFilterChain-Beans mit spezifischen RequestMatchern. Dies ermöglicht die dynamische Anwendung unterschiedlicher Sicherheitsrichtlinien basierend auf Header-Daten oder Attributen, was für Multi-Tenant-Architekturen essenziell ist.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
@EnableWebSecurity
public class MultiTenantSecurityConfig {
@Bean
@Order(1)
public SecurityFilterChain tenantFilterChain(HttpSecurity http) throws Exception {
return http
.securityMatcher(request -> request.getHeader("X-Tenant-ID") != null)
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/admin/**").hasRole("TENANT_ADMIN")
.anyRequest().authenticated()
)
.addFilterBefore(new TenantIdentificationFilter(), UsernamePasswordAuthenticationFilter.class)
.build();
}
}
spring
Erklärung
1
.securityMatcher(request -> ...)
Definiert ein Lambda-basiertes Prädikat, um zu bestimmen, ob diese spezifische Filterkette die eingehende Anfrage verarbeiten soll.
2
@Order(1)
Stellt sicher, dass diese Kette vor der Standard-Sicherheitskette ausgewertet wird, was spezialisierte Interceptor-Logik ermöglicht.