JSF - 强制在没有第三方cookie支持的iFrame的url中使用JSESSIONID

时间:2010-07-16 16:18:25

标签: jsf iframe seam

全部!我正在开发一个在iFrame中运行的JAVA / JSF应用程序。客户端在iFrame外部进行身份验证,然后重定向回包含iFrame内部应用程序的页面。如果客户端禁用了第三方cookie,则iFrame将无法访问cookie,并且永远不会看到jsessionid。

我想要做的是在应用程序中测试cookie,如果没有找到,则使用JS重定向到当前页面,并将jsessionid附加到末尾。我用

试过了
;jsessionid=#{session.getId()}

哪个好看......但是永远不会保持当前的会话。然后我添加了一个

<h:form><h:commandButton/></h:form>

到页面,关闭cookie,在浏览器中查看页面,并看到表单上列出的jsessionid与session.getId()提供的不同。

我的问题是......我怎样才能得到正确的jsessionid,这是形式的一部分?

谢谢!梅森

- Update-- 我应该提一下,这是在同一个域,网络服务器和应用程序上。 an和同一页面上的#{session.getId()}将同时返回不同的jsessionid。

1 个答案:

答案 0 :(得分:0)

会话默认是域绑定和上下文绑定。您的问题表明iframe正在投放的网页在不同的域和/或上下文中运行。

如果iframe中的页面在不同的域中运行,那么您必须编写一个“本地”servlet,在java.net.URLConnectionApache HttpClient的帮助下充当代理并让iframe链接到那个。

如果iframe中的页面在相同的域中运行但在不同的上下文中运行(并在同一个Web服务器上运行),则需要将服务器配置为在所有正在运行的Web应用程序之间共享相同的会话。如何做到这一点完全取决于有问题的服务器。如果是Tomcat或克隆/分支,请检查HTTP connectoremptySessionPath属性。