【问题标题】:Maintain cookie session with jersey CLIENT per client为每个客户端维护与 jersey CLIENT 的 cookie 会话
【发布时间】:2020-07-29 23:04:22
【问题描述】:

我正在使用 jersey API 的 client 部分。

我正在查询一个向我发送回这样一个 cookie 的休息端点

Set-Cookie: SessionId=270080680;path=/myPath

阅读文档和其他 Stack Overflow 答案后,我可以检索 cookie 并将其发回。

但是 Jersey 可以自动管理每个客户端的 cookie 处理吗?并根据路径发回需要发回的内容。

正如评论中所建议的,正确的方法似乎是创建一个过滤器并拦截请求以存储和重新发送 cookie。

这解决了一部分问题,我还是需要聪明点,检查端点的路径,才能知道我应该发送哪个cookie。

球衣可以帮我做吗?

【问题讨论】:

  • 我会将 ClientRequestFilter 与 ClientResponseFilter 结合使用。您可以从响应过滤器中获取 cookie 并将其存储并在请求过滤器中发送出去。
  • 这是我要去的地方,但这解决了部分问题。我仍然需要聪明,在我的简单示例中,我仍然需要检查请求端点是否有 /mypath 作为祖先... jersey 可以为我做吗?
  • 是的,使用 ClientRequestFilter 的 ClientRequestContext。获取 UriInfo。您将找到可用于检查的 URI 相关方法。
  • 好的,我会这样做,没问题。但这意味着如果我想正确的话,我需要重新发明轮子......
  • 你没有重新发明任何东西,因为不存在这样的东西。我认为 RESTEasy 客户端有一些浏览器 cookie 实现,但它与 Jersey 客户端不兼容。而且我认为它可能已被弃用。但是如果源代码还在的话,你可以得到一些实现的想法。

标签: java jersey jersey-2.0 jersey-client


【解决方案1】:

不适用于所有人,但在我的情况下,此解决方案非常适合!所以我决定分享它

按照建议,我开始创建自己的过滤器,一切似乎都很好!但有时我看到我的 cookie 被复制了。

挖掘后发现这是我发现的,所以我处于 JavaFX 应用程序的特定上下文中,并使用依赖于 HttpURLConnection 的最简单的球衣客户端实现。

我注意到我的 cookie 从我的应用显示 WebView 时开始复制。 我在 WebPage.java 中找到了这段代码

    if (CookieHandler.getDefault() == null) {
        boolean setDefault = Boolean.valueOf(System.getProperty(
                "com.sun.webkit.setDefaultCookieHandler",
                "true"));
        if (setDefault) {
            CookieHandler.setDefault(new CookieManager());
        }
    }

所以这个错误实际上是我的答案。就我而言,已经有人负责管理 cookie

管理所有 cookie jvm 范围的一行是:

CookieHandler.setDefault(new CookieManager());

我让您查看文档herehere 以了解如何使用它

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多