为什么 Spring 安全记住我的实现会在注销时删除所有活动令牌?

Why does Spring the security remember-me implementation remove all active tokens upon logout?

为什么从一台设备注销会删除用户的所有永久登录令牌(记住我)?

例如,在我的例子中,用户可以从台式机和平板电脑登录,而从台式机注销的用户不应导致平板电脑使用的记住我令牌被删除。

JdbcTokenRepositoryImpl 中的当前实现仅接受用户名:

public void removeUserTokens(String username) {
    getJdbcTemplate().update(removeUserTokensSql, username);
}

所以我创建了 RememberMeServicesPersistentTokenRepository 的自定义实现,它只允许为用户删除特定系列:

public void removeUserTokens(String username, String presentedSeries) {
    getJdbcTemplate().update(removeUserTokensSql, username, presentedSeries);
}

这样安全吗?

记住我不是注销后被记住。如果用户采取明确的操作来注销,则记住我的令牌应该失效。想一想使用 public 计算机的人不小心选择了记住我。如果他们明确注销,则必须使记住我的令牌失效。

记住我只是在会话超时后被记住。原因是历史上会话保存在内存中。如果有太多活动会话,则会导致内存不足错误。现在这真的没有必要,因为可以使用 Spring Session 之类的东西轻松地将会话存储在外部数据存储中。