我正在使用jersey API的客户端部分。
我正在查询一个rest端点,该端点向我发回一个类似的cookie
Set-Cookie: SessionId=270080680;path=/myPath
通过阅读文档和其他Stack Overflow的答案,我可以检索cookie并将其发回。
但是Jersey能为每个客户端自动管理这种cookie处理吗?例如,根据路径发回需要发回的内容。
正如评论中所建议的,正确的方法似乎是创建一个过滤器和拦截请求来存储并重新发送cookie。
这解决了问题的一部分,我仍然需要聪明地检查端点的路径,以知道我应该发送哪个cookie。
球衣能帮我做吗?
不适用于所有人,但在我的情况下,此解决方案非常适合!所以我决定分享
按照建议,我开始创建自己的过滤器,一切似乎都很好!但有时我看到我的饼干被复制了。
在挖掘之后,我发现了这一点,因此我处于JavaFX应用程序的特定上下文中,并使用依赖于HttpURLConnection的最简单的jersey客户端实现。
我注意到,从我的应用程序显示WebView时起,我的cookie就被复制了。我在WebPage.java 中发现了这段代码
if (CookieHandler.getDefault() == null) {
boolean setDefault = Boolean.valueOf(System.getProperty(
"com.sun.webkit.setDefaultCookieHandler",
"true"));
if (setDefault) {
CookieHandler.setDefault(new CookieManager());
}
}
所以bug实际上就是我的答案。有人已经负责管理cookie在我的情况下
在jvm范围内管理所有cookie的一行是:
CookieHandler.setDefault(new CookieManager());
我让你在这里和这里查看文档,了解如何使用