我正在尝试设置spring security 3来根据我的hibernate 3数据库对用户进行身份验证 . 我只在数据库中存储密码的sha1哈希值(不是纯文本) .
我查看了this和this,它告诉我实现自己的UserDetailsService . 不幸的是,loadUserByUsername吐出的UserDetails似乎需要明文密码,这是我没有的 .
这通常如何处理? Spring Security可以实际做我需要的吗?我错过了什么吗?
当您设置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>
Normaly Userdetails包含一个散列密码,您只需要配置Spring Security即可使用正确的password encoder进行身份验证 .
<password-encoder hash="md5"/>
在Stack Overflow answer @ Spring Security 3 database authentication with Hibernate中查找上面的密码编码器行 .
在你的情况下,你应该用以下代码替换这一行:
<password-encoder hash="sha"/>
2 回答
当您设置UserDetailsService时,spring使用它来加载用户,然后将它们与登录信息进行比较 . 这意味着,它会比较密码 . 但是,您可以配置密码编码器:Doc: Adding a Password Encoder
或者你只需编写自己的AuthenticationManager or AuthenticationProvider来加载用户并决定用户是否已成功登录 . 只需实现Interfaces AuthenticationProvider并设置配置
Normaly Userdetails包含一个散列密码,您只需要配置Spring Security即可使用正确的password encoder进行身份验证 .
在Stack Overflow answer @ Spring Security 3 database authentication with Hibernate中查找上面的密码编码器行 .
在你的情况下,你应该用以下代码替换这一行: