Код: Выделить всё
@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>
Я вставлю здесь только образец, но, пожалуйста, представьте, что этот файл полон бобов безопасности Filterchain со многими типом аутентификации, давайте представим 50. < /p>
the Используйте вариант использования, что каждый из экземпляров одного и того же приложения имеет свою собственную конфигурацию безопасности. < /p>
Например, приложение, развернутое в США. BecureFilterChainx509 Bean, в то время как одно и то же приложение, развернутое во Франции, должно было бы проверить пароль имени пользователя, в то время как приложение, развернутое в Японии Мы используем довольно «странный» подход, который мы используем на основе [b] профилей [/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>
Пока этот подход работает, он имеет недостатки, это требует от нас: < /p>
[list]
[*] Поддерживать 120 приложений. Свойства, просто ради получения правильной бобов. Код также.
[/list]
(действительно хочу избежать профилей, если это возможно)
Вопрос:
Есть ли способ, без профиля, но с настраиваемым свойством, что -то вроде < /p>
@Value("${the.security.bean.to.use}")
private String configuredSecurityBeanToUse;
Подробнее здесь: https://stackoverflow.com/questions/794 ... d-not-a-pr