【问题标题】:Spring Security: Pass session across domainsSpring Security:跨域传递会话
【发布时间】:2011-11-20 09:12:34
【问题描述】:

我正在开发一个 Web 应用程序,该应用程序必须使用不同的域才能通过 http 和 https 进行访问。现在我面临以下问题:当用户访问 http 域时,会话中存储了一些信息。当用户转换到 https 时,用户所属会话的信息会丢失(因为会话 ID 存储在与 http 域关联的 cookie 中)。

在用户切换域后,我如何才能将正确的会话重新附加到用户?

是否可以在发送由 requires-channel="https" 引起的重定向之前执行一些 java 代码?

编辑:我在想 Spring Security 中可能有一些特定的东西可以使用,但到目前为止我无法在文档中找到任何东西。

编辑 2: 刚刚发现我可能需要做的是将 ChannelProcessingFilter 替换为自定义实现。但我不知道我必须做些什么才能让 Spring Security 接受我的新类而不是默认的 ChannelProcessingFilter。注意:我使用的是 Spring 3.0。

【问题讨论】:

    标签: java spring-security


    【解决方案1】:

    查看这篇文章以获取相关信息/解决方案 - Session lost when switching from HTTP to HTTPS in PHP

    【讨论】:

      【解决方案2】:

      我们通过提供一个自定义 ChannelProcessor 解决了这个问题,该 ChannelProcessor 在默认 ChannelProcessor 之前执行并发送包含 jsessionid 作为 URL 参数的重定向。然后默认 ChannelProcessor 使用此 URL 并将另一个重定向发送到 http 域。

      要将 URL 参数更改回会话 ID 的“;”格式,我们在 apache 中有一些额外的指令:

      Header edit Location ^(.*)\?jsessionid=([^&]*)&(.*)$ $1;jsessionid=$2?$3
      Header edit Location ^(.*)\?jsessionid=([^&]*)$ $1;jsessionid=$2 
      

      然后由 tomcat 评估 URL,并在不同的域上继续相同的会话。

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 2017-02-27
        • 2011-03-02
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        相关资源
        最近更新 更多