У меня есть устаревшее программное обеспечение, в котором управление пользователями и обработка учетных данных основаны на Tomcat Apache Realm
<Realm className="org.apache.catalina.realm.JDBCRealm"
dataSourceName="jdbc/mydb"
roleNameCol="role_name" userCredCol="password"
userNameCol="user_name" userRoleTable="user_roles"
userTable="users">
<CredentialHandler className="org.apache.catalina.realm.SecretKeyCredentialHandler"
algorithm="PBKDF2WithHmacSHA512"
iterations="100000"
keyLength="256"
saltLength="16"
/>
</Realm>
Я хочу повторно использовать эту схему, а также пароли в нашем новом программном обеспечении, разработанном с помощью Spring Security. Я попробовал следующее, и похоже, что схема базы данных работает, но пароли больше не читаются
Pbkdf2PasswordEncoder passwordEncoder = new Pbkdf2PasswordEncoder();
passwordEncoder.setAlgorithm(SecretKeyFactoryAlgorithm.PBKDF2WithHmacSHA512);
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select user_name, password , true from users where user_name=?")
.authoritiesByUsernameQuery("select user_name, role_name from user_roles where user_name=?")
.passwordEncoder(passwordEncoder);
Но при попытке войти с паролями возникают следующие ошибки:
java.lang.IllegalArgumentException: Detected a Non-hex character at 33 or 34 position
at org.springframework.security.crypto.codec.Hex.decode(Hex.java:62)
at org.springframework.security.crypto.password.Pbkdf2PasswordEncoder.decode(Pbkdf2PasswordEncoder.java:166)
at org.springframework.security.crypto.password.Pbkdf2PasswordEncoder.matches(Pbkdf2PasswordEncoder.java:142)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:90)
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:166)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:175)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:200)
Может кто-нибудь сказать мне, как правильно настроить безопасность Spring для обработки этой миграции.