首页 文章

Spring Security - 使用CAS,MySQL,SearchModeSearchDatabaseAuthenticationHandler和BasicDataSource进行Bcrypt

提问于
浏览
0

如果我有一个存储使用Spring的Bcrypt编码器加密的用户名和密码的数据库,那么如何使用我当前的设置将其解码回Spring中的纯文本?

我的MySQL有这个表用于身份验证:

username     |  password     |  enabled
----------------------------------------
varchar(50)  |  varchar(100)  |  tinyint

密码字段将包含每个用户的Bcrypt密码 .

现在为CAS的deployerConfigContext.xml .

<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler">
    <property name="tableUsers"><value>user_authentication</value></property>
    <property name="fieldUser"><value>username</value></property>
    <property name="fieldPassword"><value>password</value></property>
    <property name="dataSource" ref="dataSource"/>
  </bean>

我将dataSource定义为:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:mysql://localhost:3306/user_mgt</value>
    </property>
    <property name="username"><value>root</value></property>
    <property name="password"><value>test_pw</value></property>
</bean>

我不确定我是否可以在没有自定义的情况下实现Bcrypt解码 .

1 回答

  • 1

    当你使用散列密码时,不可能恢复纯文本,因为这个存在我们使用散列算法来放置散列密码 . 要对用户进行身份验证,您必须将数据库中的哈希密码与用户输入连接的哈希密码进行比较 . Spring安全性为您做到了,您只需告诉spring安全性您在配置中使用BCryptPasswordEncoder:

    <authentication-manager>
        <authentication-provider>
           .......
           <password-encoder red="encoder"/>
        </authentication-provider>
    </authentication-manager>
    .........
    <beans:bean id="encoder" class="org.springframework.security.crypto.password.BCryptPasswordEncoder"/>
    

    请参考spring security文档

相关问题