Вот одно решение для этого, которое я придумал и протестировал.
Заслуживает особого внимания эта информация в этом классе: ReactiveAuthenticationManagerAdapter .Там говорится:
Адаптирует AuthenticationManager к реактивным API.Это в некоторой степени необходимо, поскольку многие способы хранения учетных данных (например, JDBC, LDAP и т. Д.) Не имеют реактивных реализаций.Более того, как правило, рекомендуется хранить пароли в намеренно медленном хеше, который блокировал бы поступление любого запроса, если он не был помещен в другой поток.
Сначала создайте класс конфигурации,Это будет обрабатывать подключение к LDAP.
@Configuration
public class ReactiveLdapAuthenticationConfig {
// Set this in your application.properties, or hardcode if you want.
@Value("${spring.ldap.urls}")
private String ldapUrl;
@Bean
ReactiveAuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource) {
BindAuthenticator ba = new BindAuthenticator(contextSource);
ba.setUserDnPatterns(new String[] { "cn={0},ou=people" } );
LdapAuthenticationProvider lap = new LdapAuthenticationProvider(ba);
AuthenticationManager am = new ProviderManager(Arrays.asList(lap));
return new ReactiveAuthenticationManagerAdapter(am);
}
@Bean
BaseLdapPathContextSource contextSource() {
LdapContextSource ctx = new LdapContextSource();
ctx.setUrl(ldapUrl);
ctx.afterPropertiesSet();
return ctx;
}
}
После этого вы захотите настроить свою безопасность, следуя шаблонам здесь .Самая базовая конфигурация цепочки заключается в следующем:
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange()
.anyExchange().authenticated()
.and()
.httpBasic();
return http.build();
}
Для полноты картины вы должны убедиться, что у вас есть следующие данные:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
Другие ссылки