2016-10-30 28 views
0

是否有任何理由为什么从一台设备注销会删除用户的所有持久登录令牌(记住我)?为什么Spring安全记住我实现在注销时删除所有活动令牌?

以我的情况为例,用户可以从桌面和平板电脑登录,而从桌面注销的用户不应使平板电脑使用的记忆我令牌被删除。

JdbcTokenRepositoryImpl当前实现只接受用户名:

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

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

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

这是安全吗?

回答

1

记住我不是关于退出后记住。如果用户采取明确行动注销,则记住我的令牌应该失效。想想一个使用公共计算机的人不小心选择记住我。如果他们明确注销,记住我的标记必须失效。

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

+0

感谢您的回答,我已阅读了更多关于Spring Session的内容,这似乎是我正在寻找的。考虑记住我与春季会议相比是否过时是否正确? – W4pp

+1

春季会议可以完全取代记住我,但我不会认为它已经过时。原因在于,在某些情况下,用户可能无法使用Spring Session(即政治) –