【问题标题】:Continuing sessions using JSESSIONID使用 JSESSIONID 继续会话
【发布时间】:2015-02-10 15:20:16
【问题描述】:

我有一个需要username and password authentication 才能进入的网络应用程序。

我正在做的是,从独立的Java app 对用户进行身份验证,这将通过使用usernamepassword 向服务器发出Http 请求来实现。然后我会从服务器的响应中检索JSESSIONID cookie。

现在我想要的是使用这个JSESSIONID 在浏览器上继续会话,即让user 浏览我的 Web 应用程序的页面,这些页面将由我用于身份验证的独立 java 应用程序打开。

这可能吗? 或者有其他方法吗?

【问题讨论】:

    标签: java httpsession jsessionid


    【解决方案1】:

    可以使用下面提到的方法更改Cookie。

            Cookie cookie = new Cookie("JSESSIONID", NEWSESSIONID);
            response.addCookie(cookie); 
    

    从您的应用程序中,您可以在第一次打开浏览器时发送 JSESSIONID 作为参数,并在过滤器或 servlet 中使用上述方法重置您的 cookie。一旦您发回响应,这将在客户端重置您的 cookie。在病房的下一个请求,您将能够访问之前创建的会话。

    【讨论】:

    • 当我访问我的网络应用程序时,我没有发送请求,只是浏览它。
    • 既然您在浏览应用程序时没有任何详细信息,我们如何维护会话?身份验证后,您是否从独立应用程序打开浏览器?
    • 是的,这就是我想要做的。
    【解决方案2】:

    这是可能的,但没那么简单。

    由于 Web 应用程序不共享会话,因此您需要的是一种单点登录 (SSO) 解决方案,其中涉及一个“身份提供者”(IdM),它为一个用户对用户进行身份验证或更多“服务提供商”(SP)。在这种情况下,您的 servlet 是 IdM,而您的 Web 应用程序是 SP。

    根据您的部署,以下是您可以使用的第三方开源 SSO 库:

    • Kerberos
    • PicketLink(用于 JBOSS)
    • OpenAM(用于 Tomcat)

    如果您不想使用第三方库,您也可以将您的 servlet 修改为 IdM。无论哪种方式,我建议在决定解决方案之前阅读一些关于安全断言标记语言 (SAML) 的内容。 SAML 是上述库实现的一种流行方法。

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2019-10-27
      • 2016-10-24
      • 2013-03-11
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多