Интерфейс UserDetailsService
- это то, что вы ищете, хотя он не используется в сочетании с аутентификацией в памяти.
- Аутентификация в памяти : пользователь указывает имена пользователей и пароли, и они хранятся только в памяти
- Custom UserDetailsService : пользователь указывает способ получения имен пользователей и паролей
Чтобы предоставить свой собственный UserDetailsService
, вы можете просто представить его как боб (нет необходимости использовать AuthenticationManagerBuilder
)
@Bean
public UserDetailsService userDetailsService() {
return username -> {
MyUser myUser = this.myUserRespository.findByUsername(username);
return new MyUserDetails(myUser);
};
}
Обратите внимание, что UserDetailsService
возвращает экземпляр UserDetails
, который является интерфейсом Spring Security. Поэтому рекомендуется также создать простой объект-мост, который расширяет любой объект вашего домена для вашего пользователя:
private static class MyUserDetails extends MyUser implements UserDetails {
public MyUserDetails(MyUser myUser) {
super(myUser);
}
// ... implement UserDetails methods
}