Spring安全性更改密码,然后注销,但在使用新密码重新登录时失败

时间:2015-04-29 05:11:18

标签: spring security spring-security passwords

我快死了,我快死了! 我用 春季4.1.5.RELEASE spring-security 4.0.0.RC2 spring-data-jpa 1.8.0.RC1

在我的UserController.changePwd()方法中,如下所示:

User currentUser = this.securityUtil.getCurrentUser();
    currentUser.setPassword(passwordEncoder.encodePassword(newPwd, null));
    this.userService.save(currentUser);
    request.getSession()
                .removeAttribute(Constants.SESSION_CURRENT_USER_KEY);

更改密码后,请求被重定向到/ logout

然后我检查了数据库,密码已更改为新密码。

然后我用新密码重新登录,我收到了错误凭据异常

所以我发现了,我在org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.loadUsersByUsername(String username)方法中找到了一个用旧密码的用户

只有当我重新启动服务器时,新密码才有用。

请帮帮我,非常感谢

1 个答案:

答案 0 :(得分:0)

您是否在UserDetailsS​​ervice中使用缓存?在这种情况下,您需要在更改密码后显式重置用户的缓存条目:

@Autowired
private UserCache userCache;

public void resetPassword() {
   // Change password in DB

   // Now: explicitly expire the user from user cache
   userCache.removeUserFromCache(userName)
}