【发布时间】:2019-08-28 16:04:45
【问题描述】:
我有一个 WebClient,它将带有登录凭据的 JSON 对象发送到远程服务器。然后远程服务器返回 cookie。之后,我需要将数据连同 cookie 一起发布到该远程服务器。但是,我无法弄清楚如何在 POST 中重用 cookie。
据我所知,登录响应给出了以下结构 MultiValueMap<String, ResponseCookie>,但是在 POST 上设置 cookie 的代码需要 MultiValueMap<String, String> 或只是 cookie(String, String)。
我想我一定是错过了一些转换器魔法,但是什么? 我什至需要退回整个 cookie 吗?
cookie 看起来像这样;
{SSO_Sticky_Session-47873-loadBalancedAdminGrp=[SSO_Sticky_Session-47873-loadBalancedAdminGrp=BNAMAKAKJABP; Path=/; HttpOnly], AUTH_TOKEN=[AUTH_TOKEN=v0l3baVZejIKjdzA1KGpkz4ccnosE6rKLQig1D2bdb-voFmVrF_aaYgzWl3Yc8QK; Path=/], uid=[uid=sjzipQdBtU30OlVbPWtDK2625i24i6t6g3Rjl5y5XcI=; Path=/], __cfduid=[__cfduid=dd872f39fd1d3bfe2a5c7316cd9ff63cd1554623603; Path=/; Domain=.aDomain.net; Max-Age=31535999; Expires=Mon, 6 Apr 2020 07:53:23 GMT; HttpOnly], JSESSIONID=[JSESSIONID=A264A713AD060EE12DA8215AEF66A3C0; Path=/aPath/; HttpOnly]}
我的代码如下。为简洁起见,我删除了内容类型;
WebClient webClient = WebClient.create("https://remoteServer");
MultiValueMap<String, ResponseCookie> myCookies;
webClient
.post()
.uri("uri/login")
.body(Mono.just(myLoginObject), MyLogin.class)
.exchange()
.subscribe(r ->
System.err.println("Received:" + r.cookies());
myCookies = r.cookies();
);
webClient
.post()
.uri("/uri/data")
.cookies(????) // what goes here ??
.body(....)
.exchange();
【问题讨论】:
-
简而言之,我在 post() 的 MultiValueMap 中使用 ResponseCookie.getName() 作为键,使用 ResponseCookie.getValue() 作为键的值。一旦我弄清楚如何预测和处理 cookie 的预期到期时间,我将在下周发布代码。
标签: java spring-webflux