IllegalStateException: невозможно преобразовать значение типа org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder в требуемый тип - PullRequest
0 голосов
/ 26 марта 2019

Я получаю приведенную ниже ошибку при использовании BCryptPasswordEncoder в CAS 4.2 (Центральная служба аутентификации).:

java.lang.IllegalStateException: не удалось преобразовать значение типа [org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder] в требуемый тип [org.jasig.cas.authentication.handler.PasswordEncoder] для свойства 'passwordEncoder найдено подходящих редакторов или стратегия конверсии

Я добавил все зависимости в Maven. Я также проверил документы CAS, но нет правильной информации о том, как настроить BCryptPasswordEncoder с CAS.

deployerconfigcontext.xml (Maven для компиляции):

<bean id="primaryAuthenticationHandler"
  class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
  p:dataSource-ref="dataSource"
  p:passwordEncoder-ref="passwordEncoder"
  p:sql="select PASSWORD from SD_AD_DAT_LOGIN where ACCESS_NAME=?" />
<bean id="passwordEncoder"  class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

Я подключил CAS к базе данных Oracle, и он правильно проверил пароль в виде простого текста. Теперь я хочу использовать кодирование пароля bcrypt и сохранить пароль кодирования в базе данных, чтобы CAS должен был подтвердить пароль кодирования.

Помогите мне понять использование BCryptPasswordEncoder с CAS.

1 Ответ

0 голосов
/ 29 марта 2019

После дополнительного анализа я узнал, что CAS 4.2.7 не поддерживает кодирование Bcrypt, поэтому для его использования нам нужно написать новый пользовательский класс (BCryptSearchModeSearchDatabaseAuthenticationHandler) для обработки кодировки bcrypt.

  deployerconfig.xml :
       <bean id="primaryAuthenticationHandler"
      class="io.wicket.cas.BCryptSearchModeSearchDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:tableUsers="SD_AD_DAT_LOGIN"
      p:fieldUser="ACCESS_NAME"
      p:fieldPassword="PASSWORD"
      p:passwordEncoder-ref="passwordEncoder"/>

       <bean id="passwordEncoder"    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@172.16.0.72:1521:xe" />
    <property name="username" value="PROD17102018" />
    <property name="password" value="PROD17102018" />
   </bean>
...