我正在开发一个Web应用程序,它必须使用不同的域来访问http和https。现在我遇到以下问题:当用户访问http域时,一些信息存储在会话中。当用户转换到https时,用户所属的会话信息丢失(因为会话ID存储在与http域关联的cookie中)。
如何在切换域后为用户重新连接正确的会话?
是否可以在发送由requires-channel="https
“引起的重定向之前执行一些java代码?
编辑:我当时认为可能会使用Spring Security中的特定内容,但到目前为止,我无法在文档中找到任何内容。
编辑2:刚刚发现我可能需要做的是用自定义实现替换ChannelProcessingFilter。但我不知道我必须做些什么来使spring安全性接受我的新类而不是默认的ChannelProcessingFilter。注意:我使用的是Spring 3.0。
答案 0 :(得分:1)
我们通过提供在默认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并在不同的域上继续相同的会话。
答案 1 :(得分:0)
查看此帖子以获取有关此问题的信息/解决方案 - Session lost when switching from HTTP to HTTPS in PHP