Этот ответ поставляется с полным и рабочим образцом и модульными тестами .
Давайте немного упростим вещи. Если вы используете formLogin()
, все, что вам нужно сделать, это указать UserDetailsBean
, и вы можете сопровождать его кодировщиком:
@Bean
public PasswordEncoder passwordEncoder(){
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
builder()
.passwordEncoder(input -> passwordEncoder().encode(input))
.username("user")
.password("123")
.roles("USER")
.build(),
builder()
.passwordEncoder(input -> passwordEncoder().encode(input))
.username("admin")
.password("password")
.roles("USER", "ADMIN")
.build()
);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
//application security
.authorizeRequests()
.mvcMatchers("/non-secure/**").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
;
// @formatter:on
}
Приглашаем вас загрузить образец и запустить модульные тесты в вашей среде IDE
Теперь это не предпочтительный способ, потому что в вашем коде есть пароли с открытым текстом. Вы можете заменить его менеджером, который уже имеет зашифрованные пароли .
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
builder()
.username("user")
.password("{bcrypt}$2a$10$C8c78G3SRJpy268vInPUFu.3lcNHG9SaNAPdSaIOy.1TJIio0cmTK")
.roles("USER")
.build(),
builder()
.username("admin")
.password("{bcrypt}$2a$10$XvWhl0acx2D2hvpOPd/rPuPA48nQGxOFom1NqhxNN9ST1p9lla3bG")
.roles("USER", "ADMIN")
.build()
);
}