【问题标题】:What method to use for logout in wicket application?在wicket应用程序中使用什么方法注销?
【发布时间】:2016-08-06 03:50:34
【问题描述】:

Wicket org.apache.wicket.authroles.authentication.AuthenticatedWebSession 有 2 种方法:signOutinvalidate。 javac 说signOut 标记使用not logged ininvalidate 做同样的事情(例如调用signOut)但是

从曾经保存过的地方删除登录数据

首先应该调用注销操作signOut。但是对于security reasons,会话必须在用户登录或注销后立即失效。所以从这一点开始应该调用invalidate

那么什么叫注销呢?还有什么时候需要拨打signOut,什么时候拨打invalidate

【问题讨论】:

    标签: java wicket httpsession


    【解决方案1】:

    如果您只想注销,请使用 AuthenticatedWebSession#signOut()。

    AuthenticatedWebSession 使用内部布尔标志 'signedIn' 来通知用户是否已登录 (true) 或没有任何人登录或用户已注销。

    WebSession#invalidate() 负责从 Wicket 会话注册表中删除会话并使其完全失效。 AuthenticatedWebSession#invalidate() 的实现也会调用 AuthenticatedWebSession#signOut(),这样就完成了定期注销。如果您的注销过程需要一些其他操作,这可能会有所帮助,因此您可以覆盖 AuthenticatedWebSession#signOut() 方法。

    换句话说:

    • invalidate() 调用 signOut(),然后从会话注册表中删除会话。
    • signOut() 将会话标记为“未登录”,但不会删除会话。

    【讨论】:

      【解决方案2】:

      对于注销,您应该使用#invalidate()!在我看来 #signOut() 不应该是 API 的一部分。充其量应该是#invalidate() 的别名。

      如果你想真正安全,那么你应该在登录后使用#replaceSession()

      【讨论】:

        猜你喜欢
        • 2013-01-15
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2018-03-22
        • 2019-09-20
        • 1970-01-01
        相关资源
        最近更新 更多