Я сейчас пытаюсь изучить безопасность Spring. Я использовал BCryptPasswordEncoder
для кодирования пароля пользователя перед сохранением в базе данных
Код:
@Override
public void saveUser(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setActive(1);
Role userRole = roleRepository.findByRole("ADMIN");
user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
userRepository.save(user);
}
Затем использовал его во время аутентификации, и пользователь проходил аутентификацию, как и ожидалось.
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.
jdbcAuthentication()
.usersByUsernameQuery(usersQuery)
.authoritiesByUsernameQuery(rolesQuery)
.dataSource(dataSource).passwordEncoder(bCryptPasswordEncoder);
}
Затем я удалил .passwordEncoder(bCryptPasswordEncoder);
из метода configure()
, однако пользователи с зашифрованным паролем успешно проходят аутентификацию.
Затем я удалил кодировщик паролей из метода saveUser()
и configure()
и сохранил User
в базе данных (т.е. без кодирования пароля) и попытался получить доступ к аутентифицированной странице, но я получил AccessedDeniedException
,
Но пользователи с зашифрованным паролем все равно проходят аутентификацию, хотя я удалил passwordEncoder()
из configure()
метода. Почему это происходит?
Использует ли Spring Security по умолчанию кодировщик паролей во время аутентификации?
Если да, то как использовать Spring Security без шифрования пароля?