Прежде всего, класс User должен реализовывать интерфейс UserDetails следующим образом: // userdetails методы
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return this.roles.stream().map(SimpleGrantedAuthority::new).collect(toList());
}
@Override
public String getUsername() {
return this.getEmail();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
@Transient
private List<String> roles = Arrays.asList("ROLE_USER");
public List<String> getRoles() {
return roles;
}
2-й, вам нужен класс, который реализует UserDetailsService следующим образом:
@Service("customCustomerDetailsService")
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private CredentialRepository users;
@Override
public UserDetails loadUserByUsername(String email) {
return this.users.findByEmail(email)
.orElseThrow(() -> new UsernameNotFoundException("Username: " + email + " not found"));
}
}
Затем вы автоматически подключаете этот класс в свой класс конфигурации безопасности
@Autowired
CustomUserDetailsService customCustomerDetailsService;
Вам необходимо реализовать DAO DaoAuthenticationProvider в своем классе конфигурации безопасности следующим образом:
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
authProvider.setUserDetailsService(userDetailsService());
authProvider.setPasswordEncoder(encoder());
return authProvider;
Я вполне уверен, что этот вопросна этой платформе уже дан ответ.