Я пытаюсь создать делегирующий провайдер аутентификации для выполнения логики, прежде чем решить, какой аутентификаторProvider выбрать на основе некоторой произвольной логики;для примера, если имя пользователя начинается с префикса.
Мой текущий SecurityConfig, который будет пытаться провайдеров аутентификации по одному:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final MyCustomCredentialAuthProvider myAuthProvider;
...
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth
.ldapAuthentication().configuration(...).here(...).etc(...).and() // ldapAuthenticationProvider is created here
.authenticationProvider(myAuthProvider).and()
// more authentication providers to be added in the future
}
}
На основе имени пользователя, яхотел бы выбрать, хочу ли я использовать попробовать провайдера, чтобы он никогда не вызывался, если имя пользователя не начинается с определенного префикса ("ldap", "custom", "ad", "etc" ...), так:
@Component
public class DelegatingProvider implements AuthenticationProvider {
// Problem: How do I create this ldapAuthenticationProvider bean?
private final LdapAuthenticationProvider ldapAuthenticationProvider;
private final MyCustomCredentialAuthProvider myAuthProvider;
...
@Override
public Authentication authenticate(final Authentication authentication) throws AuthenticationException {
if (authentication.getName() == null) {
throw new BadCredentialsException("No username provided");
} else if (authentication.getName().startsWith("ldapPlease") }
return ldapAuthProvider.authenticate(authentication);
// } else if (...) { ...
// } else if (...) { ...
} else {
return myAuthProvider.authenticate(authentication);
}
}
@Override
public boolean supports(final Class<?> authentication) {
return UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication);;
}
}
Я не могу подключиться к LdapProvider таким образом, поскольку он создается SecurityConfig - как я могу создать и подключить в bean-компоненте LdapProvider, когда он был ранее обработанAuthBuilder в SecurityConfig?