使用Hibernate和哈希密码的Spring Security DB身份验证?

使用Hibernate和哈希密码的Spring Security DB身份验证?,hibernate,authentication,hash,passwords,spring-security,Hibernate,Authentication,Hash,Passwords,Spring Security,我正在尝试设置SpringSecurity3,以便根据我的Hibernate3数据库对用户进行身份验证。我只在数据库中存储密码的sha1散列(不是明文) 我已经看过和,它们告诉我实现自己的UserDetailsService。不幸的是,loadUserByUsername吐出的UserDetails似乎需要明文密码,而我没有明文密码 这通常是如何处理的?Spring Security真的能满足我的需要吗?我遗漏了什么吗?当您设置UserDetails服务时,spring使用该服务加载用户,然后将

我正在尝试设置SpringSecurity3,以便根据我的Hibernate3数据库对用户进行身份验证。我只在数据库中存储密码的sha1散列(不是明文)

我已经看过和,它们告诉我实现自己的UserDetailsService。不幸的是,loadUserByUsername吐出的UserDetails似乎需要明文密码,而我没有明文密码


这通常是如何处理的?Spring Security真的能满足我的需要吗?我遗漏了什么吗?

当您设置UserDetails服务时,spring使用该服务加载用户,然后将其与登录信息进行比较。也就是说,它会比较密码。 但是,您可以配置密码编码器:

或者您只需编写自己的加载用户并决定用户是否已成功登录。只需实现接口 AuthenticationProvider并设置配置

<authentication-manager>
  <authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>

<bean id="myAuthenticationProvider"
  class="stackoverflow.SuperduperMegaAuthenticationProvider">
</bean>

通常情况下,Userdetails包含散列密码,您只需配置Spring Security,使用正确的密码进行身份验证

 <password-encoder hash="md5"/>

在堆栈溢出应答@中查找上面的密码编码器行

在这种情况下,您应该将此行替换为:

<password-encoder hash="sha"/>