在CAS 4.2(中央身份验证服务)中使用BCryptPasswordEncoder时出现以下错误:
java.lang.IllegalStateException:无法将类型[org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder]的值转换为属性'passwordEncoder'所需的类型[org.jasig.cas.authentication.handler.PasswordEncoder]:没有匹配的编辑器或发现转换策略
我在Maven中添加了所有依赖项。我还查看了CAS文档,但没有关于如何使用CAS配置BCryptPasswordEncoder的正确信息。
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的用法。
经过一些分析,我知道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>