java - Spring RestTemplate 遵循带有 cookie 的重定向

标签 java spring rest integration resttemplate

最近我遇到了一个问题,我需要对远程服务执行一个GET 请求(我想是使用一个简单的 servlet),而 RestTemplate 返回了重定向太多!.

经过一些调查,似乎对指定远程服务的第一个请求实际上只是一个带有一些 Set-Cookie header 的 302 重定向(到自身)。如果我使用的是“普通”浏览器,它会确认 header ,正确设置 cookie,并在应该满足正常 200 响应的地方遵循重定向。

我发现 RestTemplate 不接受 Set-Cookie header ,因此会一遍又一遍地进行重定向。

有没有办法让 RestTemplate 仅针对当前请求确认 Set-Cookie header ?我最好不希望它保持状态,因为系统的其他部分也使用 RestTemplate。

问候

最佳答案

Spring 默认请求工厂 (SimpleClientHttpRequestFactory) 不处理 cookie。将其替换为具有 cookie 能力的 Apache HttpClient 的请求工厂:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

CloseableHttpClient httpClient = HttpClientBuilder
    .create()
    .build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);

关于java - Spring RestTemplate 遵循带有 cookie 的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37024709/

相关文章:

java - 匹配的通配符是严格的,但是找不到元素的声明

java - tomcat中受密码保护的应用程序

java - Hibernate + Spring + 持久一对一关系 + 空外键

java - Swift 和 REST API 身份验证

node.js - 我应该使用什么 HTTP 动词来请求一些新数据但不将它们保存在数据库中?

java - java - 如何在java中传递大于999 999 999的数字作为参数

JavaFx 应用程序在退出时崩溃

java - 在 Spring boot 中指定 Tomcat 'Resource's

java - Spring - 使用一个 Controller 处理多个表单提交

java - REST API 架构