有没有一种方法可以从一个restTemplate交换响应中获取Cookie并将其设置为另一个单独的请求?

时间:2019-06-03 15:34:27

标签: spring spring-boot cookies

我对弹簧和弹簧靴子比较陌生,需要一些急需的帮助。 我有谷歌,谷歌和谷歌,但这已经很久了,它应该很简单。

我目前正在一个项目中,需要从一个restTemplate响应中接收到的Cookie,并将其传递给另一个请求。

代码看起来像这样:

ResponseEntity<SomeObject> responseOne  = restTemplate.exchange(URL, HttpMethod.POST, request, SomeObject.class);

总共有3个cookie,我需要它们将它们从responseOne移到responseTwo的调用中。

ResponseEntity<SomeOtherObject> responseTwo  = restTemplate.exchange(URL, HttpMethod.POST, request, SomeOtherObject.class);

希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:2)

您可以通过responseOne.getHeaders()方法访问cookie。它们以标题Set-Cookie的形式发送,例如:

Set-Cookie: JSESSIONID=4054C174E5CD78D5FDD8BD8D155FC233; Path=/yourapp; Secure; HttpOnly Set-Cookie: anotherCookie=anotherValue; path=/; HttpOnly

解析每个标头值以分隔cookie名称和cookie值。

然后,您只需要在第二个调用的请求实体中设置它们:


SomeObject someObject = ...

HttpHeaders headers = new HttpHeaders();
headers.add("COOKIE", "JSESSIONID=4054C174E5CD78D5FDD8BD8D155FC233; anotherCookie=anotherValue; cookie3=value3");

HttpEntity<SomeObject> entity = new HttpEntity<>(someObject, headers);

ResponseEntity<SomeOtherObject> responseTwo  = restTemplate.exchange(URL, HttpMethod.POST, request, SomeObject.class);