首页 文章

具有Hibernate和散列密码的Spring Security DB身份验证?

提问于
浏览
3

我正在尝试设置spring security 3来根据我的hibernate 3数据库对用户进行身份验证 . 我只在数据库中存储密码的sha1哈希值(不是纯文本) .

我查看了thisthis,它告诉我实现自己的UserDetailsService . 不幸的是,loadUserByUsername吐出的UserDetails似乎需要明文密码,这是我没有的 .

这通常如何处理? Spring Security可以实际做我需要的吗?我错过了什么吗?

2 回答

  • 2

    当您设置UserDetailsService时,spring使用它来加载用户,然后将它们与登录信息进行比较 . 这意味着,它会比较密码 . 但是,您可以配置密码编码器:Doc: Adding a Password Encoder

    或者你只需编写自己的AuthenticationManager or AuthenticationProvider来加载用户并决定用户是否已成功登录 . 只需实现Interfaces AuthenticationProvider并设置配置

    <authentication-manager>
      <authentication-provider ref="myAuthenticationProvider"/>
    </authentication-manager>
    
    <bean id="myAuthenticationProvider"
      class="stackoverflow.SuperduperMegaAuthenticationProvider">
    </bean>
    
  • 3

    Normaly Userdetails包含一个散列密码,您只需要配置Spring Security即可使用正确的password encoder进行身份验证 .

    <password-encoder hash="md5"/>
    

    在Stack Overflow answer @ Spring Security 3 database authentication with Hibernate中查找上面的密码编码器行 .

    在你的情况下,你应该用以下代码替换这一行:

    <password-encoder hash="sha"/>
    

相关问题