Миграция аутентификации и безопасности из Apache Realm в Spring - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть устаревшее программное обеспечение, в котором управление пользователями и обработка учетных данных основаны на 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 для обработки этой миграции.

...