IllegalStateException:无法将org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder类型的值转换为所需的类型

时间:2019-03-26 07:34:44

标签: spring-security cas illegalstateexception

在CAS 4.2(中央身份验证服务)中使用BCryptPasswordEncoder时出现以下错误。

  

java.lang.IllegalStateException:无法将属性'passwordEncoder'的[org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder]类型的值转换为所需的[org.jasig.cas.authentication.handler.PasswordEncoder]类型:否找到匹配的编辑器或转换策略

我已经在Maven中添加了所有依赖项。我还检查了CAS文档,但是没有有关如何使用CAS配置BCryptPasswordEncoder的适当信息。

deployerconfigcontext.xml(用于编译的Maven):

s, k = 0,0

我已经将CAS与Oracle数据库连接起来,并且它正确地验证了纯文本密码。现在,我想使用bcrypt密码编码,并将编码密码存储在数据库中,以便CAS应该验证编码密码。

帮助我了解BCryptPasswordEncoder在CAS中的用法。

1 个答案:

答案 0 :(得分:0)

经过更多分析后,我知道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>