我有一个旧版软件,其中用户管理和凭据处理基于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安全性以处理此迁移。