【问题标题】:Get cookie from after calling a POST end point调用 POST 端点后获取 cookie
【发布时间】:2019-09-26 00:24:08
【问题描述】:

我正在从我的控制器调用一个 POST 端点。 POST 端点验证用户并返回一个 cookie。我是 Spring web-flux 的新手,所以需要获取 cookie 并将其发回。

@PostMapping(value = "/valid")
public ResponseWrapper<UserResponseDTO> validate(
    @RequestBody @Valid RequestWrapper<UserRequestDTO> request,
    HttpServletResponse res) {

WebClient webClient = WebClient.builder()
    .baseUrl(BASE_URI)
    .defaultHeader(HttpHeaders.CONTENT_TYPE,
        MediaType.APPLICATION_JSON_VALUE)
    .build();

Mono<ResponseWrapper> response = webClient.post()
    .uri(PWD_AUTH_URI)
    .contentType(MediaType.APPLICATION_JSON)
    .syncBody(request)
    .retrieve()
    .bodyToMono(ResponseWrapper.class);

ResponseWrapper<UserResponseDTO> wr = response.block();
    // how to get cookie from the webClient 
    // set into the "res" that cookie 

return wr;
}

【问题讨论】:

  • 使用exchange 方法而不是retrieve 来使用Web 服务响应,因此您可以访问clientResponse 对象,您可以从中访问cookies。永远不建议阻止响应式调用。

标签: java spring-boot cookies spring-webflux


【解决方案1】:

您可以通过使用响应来访问响应的 cookie:

final String cookieName = "cookie_name";

// Retrieves cookie from WebClient
ResponseCookie cookie = webClient.post()
        .uri(PWD_AUTH_URI)
        .contentType(MediaType.APPLICATION_JSON)
        .syncBody(request)
        .exchange()
        .map(response -> response.cookies().getFirst(cookieName))
        .block();

// Set ResponseCookie as new cookie for response
res.addCookie(new Cookie(cookieName, cookie.getValue()));

正如akreddy.21 在他的评论中建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多