Ändern Sie die Bere für die Security Security Security Security Security SecuryFilterchain basierend auf einer Eigenscha
Posted: 12 Feb 2025, 03:08
Ich möchte die tatsächliche SecurityFilterChain -Bean basierend auf einer zu befietsstarken Eigenschaft konfigurieren. >
So konfigurieren Sie die tatsächliche SecurityFilterchain -Bean?
Code: Select all
@Configuration
@EnableWebSecurity
class SecurityConfiguration {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll()).csrf(AbstractHttpConfigurer::disable);
return httpSecurity.build();
}
@Bean
public SecurityFilterChain securityFilterChainX509(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.x509()
.subjectPrincipalRegex("CN=(.*?)(?:,|$)");
return httpSecurity.build();
}
@Bean
public SecurityFilterChain securityFilterChainJWT(HttpSecurity httpSecurity) throws Exception {
}
[...]
}
< /code>
Ich klebe hier nur ein Beispiel, aber stellen Sie sich vor, diese Datei ist voll von SecurityFilterchain -Bohnen mit vielen Authentifizierungstypen. Anwendungsfall ist, dass jede der Instanzen derselben App über eine eigene Sicherheitskonfiguration verfügt. Die SecurityFilterchainx509 -Bean, während dieselbe App, die in Frankreich bereitgestellt wurde, das Benutzername -Kennwort überprüfen müsste, während die in Japan bereitgestellte App eine andere Art von Authorte usw. usw. usw. benötigen würde. Wir verwenden einen eher "seltsamen" Ansatz, den wir basierend auf [b] Profilen [/b]. @Bean
@Profile({"canada", "brazil"})
SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll()).csrf(AbstractHttpConfigurer::disable);
return httpSecurity.build();
}
@Bean
@Profile({"usa", "egypt"})
public SecurityFilterChain securityFilterChainX509(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.x509()
.subjectPrincipalRegex("CN=(.*?)(?:,|$)");
return httpSecurity.build();
}
@Bean
@Profile({"germany"})
public SecurityFilterChain securityFilterChainJWT(HttpSecurity httpSecurity) throws Exception {
}
< /code>
Während dieser Ansatz funktioniert, hat er Nachteile. Wir müssen: < /p>
viele Anwendungsprofile beibehalten. Eigenschaften, nur um die richtige Bohne zu bekommen. < /li>
Wenn wir uns ändern müssen Der Code auch.
Gibt es einen Weg ohne Profil, aber mit einer konfigurierbaren Eigenschaft, so etwas wie < /p>
@Value("${the.security.bean.to.use}")
private String configuredSecurityBeanToUse;