【问题标题】:Rest Jersey client how to pass cookie in all requestsRest Jersey客户端如何在所有请求中传递cookie
【发布时间】:2017-08-10 19:34:07
【问题描述】:

有没有一种很好的方法可以将 cookie 传递给使用相同客户端对象的所有请求?
现在我必须像这样将 cookie 传递给每个请求:

final Client client = ClientBuilder.newClient(clientConfig);
UriBuilder authenticate_url = UriBuilder.fromUri("xxxxxxxxx/authenticate");

WebTarget webTarget = client.target(authenticate_url);
Invocation.Builder invocationBuilder =  webTarget.request(MediaType.APPLICATION_XML);
Response response = invocationBuilder.get();


Map<String, NewCookie> cookies = response.getCookies(); //store cookies

webTarget = client.target(other_url);       
invocationBuilder =  webTarget.request(MediaType.APPLICATION_XML).cookie(cookies.get("KEY"));

response = invocationBuilder.get(); //works

invocationBuilder =  webTarget.request(MediaType.APPLICATION_XML);

response = invocationBuilder.get(); //does not work

【问题讨论】:

  • Use a ClientRequestFilter。我认为 ClientRequestContext 中的 cookie 映射可能是不可修改的。您可能需要手动设置 Cookie 标头。
  • 顺便说一句,响应中的 cookie 映射返回 NewCookies。这只是从服务器到客户端。客户端到服务器应该使用Cookie。您可以通过调用newCookie.toCookie()NewCookie 转换为Cookiestackoverflow.com/q/34046292/2587435

标签: java jersey-2.0


【解决方案1】:

你可以像这样使用@Context

@GET
public String get(@Context HttpHeaders hh) 
{

MultivaluedMap<String, String> headerParams = hh.getRequestHeaders();
    Map<String, Cookie> pathParams = hh.getCookies(); 
}

或者你可以像这样使用@CookieParam注解

@POST
public void post(@CookieParam("<parmeter name>") CookieParameter ckparameter) {

    ...
}

更新

在你的调用生成器中添加

invocationBuilder.header("Cookie", "example-cookie=hello world;exapmle2-cookie=hai all");

【讨论】:

  • 我只询问客户。
  • 我试过 invocationBuilder.header("Cookie", cookies.get("KEY"));但它没有被服务器接受,因为实际请求发生在 webTarget.request
  • cookies.get("KEY") 将只返回键为 "KEY" 的 cookie 中的值,改用 "KEY="+cookies.get("KEY") 并重试
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2021-03-03
  • 2021-06-23
  • 1970-01-01
  • 2023-04-09
  • 2014-04-16
  • 1970-01-01
相关资源
最近更新 更多