在我的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)方法中找到了一个用旧密码的用户
只有当我重新启动服务器时,新密码才有用。
请帮帮我,非常感谢
答案 0 :(得分:0)
您是否在UserDetailsService中使用缓存?在这种情况下,您需要在更改密码后显式重置用户的缓存条目:
@Autowired
private UserCache userCache;
public void resetPassword() {
// Change password in DB
// Now: explicitly expire the user from user cache
userCache.removeUserFromCache(userName)
}