2

我们有一个使用 Java Web Start 部署的应用程序。它使用 URLConnection 与 servlet 通信,并通过 Cookies (JSESSIONID) 管理会话。它适用于 Java 1.5 和 1.6。在Windows中使用 Java 1.7它不再起作用:cookie JSESSIONID 不会发送回服务器(我使用 apache 轴的 HTTPMonitor 看到了这一点)。怎么了?

从 linux 机器使用 Java Web Start 启动相同的应用程序按预期工作。

版本是:JRE 1.7.0_04 和 Java Web Start 10.4.0.22_04

4

1 回答 1

2

我们对我们的应用程序在从 Eclipse 启动时运行良好但在通过 Web Start 运行时无法与我们经过身份验证的 REST 端点通信的事实感到非常沮丧,因为 JSESSIONID 根据问题中描述的问题丢失。我们正在运行 Java 1.7。

经过多次远程调试,我们发现无论是有意还是无意(我只能找到很少的文档,例如这里的单行:http: //docs.oracle.com/javase/tutorial/networking/cookies/cookiehandler.html ),Java Web Start 应用程序设置了一个默认的 CookieHandler,通常是 的一个实例com.sun.deploy.net.cookie.DeployCookieSelector,但不管它是什么,这都会弄乱 JSESSIONID cookie 处理。将默认 cookie 处理程序重置为 null java.net.CookieHandler.setDefault(null),瞧,传出的 HTTP 请求保留了 JSESSIONID cookie!

顺便说一句,Windows 和 Linux 都表现出这种行为。

于 2014-02-21T16:39:23.730 回答