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

时间:2016-10-30 14:58:19

标签: spring spring-security remember-me

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

在我的情况下,例如用户可以从桌面和平板电脑登录,从桌面注销的用户不应该删除平板电脑使用的记住我令牌。

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

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

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

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

这样安全吗?

1 个答案:

答案 0 :(得分:1)

记住我并不是在注销后被记住。如果用户采取明确的操作注销,则记住我的令牌应该无效。想想有人使用不小心选择记住我的公共计算机。如果他们明确注销,则记住我的令牌必须无效。

记住我只是在会话结束后才被记住。原因是历史会议被保存在记忆中。如果活动会话太多,则会导致内存不足错误。现在这不是必需的,因为使用类似Spring Session的东西可以很容易地将会话存储在外部数据存储中。