有没有理由为什么从一台设备注销会删除用户的所有持久登录令牌(记住我)?
在我的情况下,例如用户可以从桌面和平板电脑登录,从桌面注销的用户不应该删除平板电脑使用的记住我令牌。
JdbcTokenRepositoryImpl
中的当前实施仅接受用户名:
public void removeUserTokens(String username) {
getJdbcTemplate().update(removeUserTokensSql, username);
}
所以我创建了RememberMeServices
和PersistentTokenRepository
的自定义实现,只允许为用户删除特定系列:
public void removeUserTokens(String username, String presentedSeries) {
getJdbcTemplate().update(removeUserTokensSql, username, presentedSeries);
}
这样安全吗?
答案 0 :(得分:1)
记住我并不是在注销后被记住。如果用户采取明确的操作注销,则记住我的令牌应该无效。想想有人使用不小心选择记住我的公共计算机。如果他们明确注销,则记住我的令牌必须无效。
记住我只是在会话结束后才被记住。原因是历史会议被保存在记忆中。如果活动会话太多,则会导致内存不足错误。现在这不是必需的,因为使用类似Spring Session的东西可以很容易地将会话存储在外部数据存储中。