Spring Security: закодированный пароль не похож на BCrypt
В Spring Security аутентификация базы данных с хешированием паролейbcrypt.
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; //... String password = "123456"; PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String hashedPassword = passwordEncoder.encode(password);
spring-security.xml
//...
CREATE TABLE users ( username VARCHAR(45) NOT NULL , password VARCHAR(45) NOT NULL , enabled TINYINT NOT NULL DEFAULT 1 , PRIMARY KEY (username));
Просмотрите результаты отладки, всегда написано «Encoded password does not look like BCrypt», даже если предоставляется правильный пароль.
//... 12:56:31.868 DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource 12:56:31.868 WARN o.s.s.c.bcrypt.BCryptPasswordEncoder - Encoded password does not look like BCrypt 12:56:31.868 DEBUG o.s.s.a.d.DaoAuthenticationProvider - Authentication failed: password does not match stored value
Решение
В алгоритме хешированияbcrypt каждый раз генерируется другое хеш-значение длиной 60, например
$2a$10$LOqePml/koRGsk2YAIOFI.1YNKZg7EsQ5BAIuYP1nWOyYRl21dlne
Распространенная ошибка: длина столбца «пароль» (таблица пользователей) меньше 60, например,password VARCHAR(45)
, и некоторые базы данных автоматически усекают данные. Таким образом, вы всегда получаете предупреждение «Кодированный пароль не похож на BCrypt».
To solve it, убедитесь, что длина столбца «пароль» не менее 60.