spring-security - IllegalStateException:无法将 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 类型的值转换为所需类型
问题描述
在 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>
推荐阅读
- r - 遍历 R 中的行
- reactjs - init react-app 中的包在哪里?
- java - 在 Spring Boot 中控制启用/禁用 Kafka 消费者
- arduino - Arduino HX711 和 cc2541 蓝牙模块的测量不正确
- react-native - 使用 JWT 从受保护的 API 端点响应本机获取数据
- python - Pandas - 从 read_excel 转换十进制日期
- amcharts - 雷达图 mi 和 max 轴值
- c# - 我的 Visual Studio 2017 中缺少 C# 的 LINQ 的“转换为 foreach”重构选项
- sql - 如何为缺少的 id 值生成零?
- excel - 如何在使用 ActiveCell.Offset 作为起始单元格时设置动态结束单元格?