【问题标题】:Why does Spring the security remember-me implementation remove all active tokens upon logout?为什么 Spring 的安全记住我实现会在注销时删除所有活动令牌?
【发布时间】:2016-10-30 14:58:18
【问题描述】:

是否有任何理由从一台设备上注销会删除用户的所有持久登录令牌(记住我)?

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

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

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

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

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

这样安全吗?

【问题讨论】:

    标签: spring spring-security remember-me


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答,我已阅读有关 Spring Session 的更多信息,这似乎是我正在寻找的。与 Spring Session 相比,Remember me 已经过时是否正确?
    • Spring Session 可以完全取代记住我,但我不会认为它已经过时。原因是在某些情况下,用户可能无法使用 Spring Session(即政治)
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2017-12-19
    • 2011-07-15
    • 2017-10-23
    • 2019-10-19
    • 2023-03-31
    • 2014-06-10
    相关资源
    最近更新 更多