SpringBoot приложение не работает с BCrypt
Делаю учебное приложение на SpringBoot + SpringSecurity. При использовании NoOpPasswordEncoder все срабатывает корректно, приложение работает, логиниться удается удачно. Но при использовании бина c BCryptPasswordEncoder не удается логиниться, выходит ошибка при логине: Bad credentials, хотя данные вводятся верные. Подскажите, что можно настроить в приложении, чтобы работал BCryptPasswordEncoder? Вот класс конфига:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
private final SuccessUserHandler successUserHandler;
public SecurityConfig(@Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService, SuccessUserHandler successUserHandler) {
this.userDetailsService = userDetailsService;
this.successUserHandler = successUserHandler;
}
@Autowired
public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/user").access("hasAnyRole('ROLE_USER')")
.antMatchers("/admin").access("hasAnyRole('ROLE_ADMIN')")
.and().formLogin()
.successHandler(successUserHandler);
}
//@Bean
// public static NoOpPasswordEncoder passwordEncoder() {
// return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
// }
@Bean
public static PasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
Ответы (1 шт):
Пароль, пришедший через API, перед попаданием в UserDetailService пропускается через PasswordEncoder. NoOpPasswordEncoder ничего не делает с паролем, BCryptPasswordEncoder - шифрует. При использовании BCryptPasswordEncoder в БД должен храниться уже зашифрованный пароль.