有config(applicationContext-security.xml):
<authentication-manager alias="authenticationManager">
<authentication-provider>
<password-encoder hash="sha"/>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
Run Code Online (Sandbox Code Playgroud)
从另一边有我的dataSource(这是JdbcDaoImpl)的SQL :
...
public static final String DEF_USERS_BY_USERNAME_QUERY =
"select username,password,enabled " +
"from users " +
"where username = ?";
...
Run Code Online (Sandbox Code Playgroud)
现在有关sha于此代码的消息,因此从标准Spring Security users表中选择的密码未编码.
也许,我应该在我的hibernate映射配置中sha为password列提供一些属性:
<class name="model.UserDetails" table="users">
<id name="id">
<generator class="increment"/>
</id>
<property name="username" column="username"/>
<property name="password" column="password"/>
<property name="enabled" column="enabled"/>
<property name="mail" column="mail"/>
<property name="city" column="city"/>
<property name="confirmed" column="confirmed"/>
<property name="confirmationCode" column="confirmation_code"/>
<set name="authorities" cascade="all" inverse="true"> …Run Code Online (Sandbox Code Playgroud) 今天我将我正在处理的应用程序的spring安全版本从3.1.3升级到3.1.4,我注意到了org.springframework.security.authentication.encoding.ShaPasswordEncoder类上的弃用警告.
所以我切换到了新的org.springframework.security.crypto.password.StandardPasswordEncoder实现.
我有它工作,我能够注册一个新用户并登录我的应用程序,但是,我担心,我无法使用以前的ShaPasswordEncoder和我的自定义盐生成的密码登录.
由于我有一个已经注册了许多用户的数据库,我该怎么做才能切换实现而不会使旧的编码密码失效?它甚至可能吗?
我使用上面提到的软件堆栈,我需要在保存到数据库之前加密密码.我还需要解密密码,因为当有人更改密码时,她需要输入旧密码,然后新的onw两次,我需要检查旧密码.我搜索了很多,但我仍然不确定这是怎样的正确方法.我找到了这个链接加密,但还有其他提示吗?我也不确定MongoDB是否提供了保护密码的功能.