2017-08-10 111 views
0

是否有通过cookie来使用相同的客户对象的所有请求的好方法?
现在我必须通过cookie来这样每一个请求:休息Jersey客户端如何通过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 
+1

[使用ClientRequestFilter(https://jersey.github.io/documentation/latest/filters-and-interceptors.html)。我认为CookieRequestContext可能是不可修改的。您可能需要手动设置“Cookie”标头。 –

+0

顺便说一句,从响应该cookie地图返回'NewCookie's。这只是从服务器到客户端。客户端到服务器应该使用'Cookie'。你可以通过调用'newCookie.toCookie()'把'NewCookie'变成'Cookie'。 https://stackoverflow.com/q/34046292/2587435 –

回答

0

要么你可以使用@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) { 

    ... 
} 

UPDATE

在你调用生成器添加

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

我问大约只有客户端。 – Tirmean

+0

我试图invocationBuilder.header( “曲奇”,cookies.get( “KEY”)); 但它不是由服务器 因为实际的请求发生在webTarget.request – Tirmean

+0

cookies.get(“钥匙”)接受将饼干只返回值与关键的“钥匙”使用“KEY =” + cookies.get (“KEY”),然后重试 –

相关问题