2016-05-04 19 views
6

çerezi ile yönlendirmeyi takip et Yakın bir zamanda bir uzak servise GET isteği yapmam gereken bir soruna rastladım (basit bir sunucu uygulamasının kullanılması) ve RestTemplate Too many redirects!'u döndürdü.Spring RestTemplate

Bazı araştırmalardan sonra, belirtilen uzaktan hizmete yapılan ilk istek gibi görünüyor, aslında sadecebaşlıklarıyla birlikte 302 yönlendirme (kendi başına). "Normal" bir tarayıcı kullanıyor olsaydım, üstbilgiyi kabul eder, çerezleri doğru şekilde ayarlayabilir ve normal 200 yanıtını karşılaması gereken yönlendirmeyi takip ederdi.

Ne buldum RestTemplate Set-Cookie üstbilgisini kabul etmiyor, böylece yönlendirme tekrar tekrar yapılır.

RestTemplate ürününü yalnızca geçerli istek için Set-Cookie başlığını kabul etmenin bir yolu var mı? Tercihen RestTemplate sistemin diğer kısımlarından da kullanıldığından, durumun beklemesini istemiyorum. çerezleri işlemez

Selamlar

+0

[bu] (http://springinpractice.com/2012/04/08/sending-cookies-with-resttemplate) yapmak istediğin bu muydu? Ayrıca [bu bir] (http://stackoverflow.com/questions/22853321/resttemplate-client-with-cookies)? – ha9u63ar

+0

@ ha9u63ar Her iki bağlantı da istek başlığına bir çerez ekler. Tercihen 2 ayrı istek yapmak istemiyorum. (1, yönlendirmede durmak, "Set-Cookie" başlığını koklamak, onu ikinci isteğe eklemek ve yürütmek için). RestTemplate'in yönlendirmeyi takip etmesini istiyorum (aslında bunu zaten yapıyor) ve ayrıca "Set- Çerez "başlık. –

cevap

6

Bahar varsayılan istek fabrika (SimpleClientHttpRequestFactory). kurabiye yeteneğine sahiptir Apache HttpClient ile bir istek fabrikada ile değiştirin:

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); 
+0

HttpClient 4.3.4 ile çalışmaz. Herhangi bir fikir pls? –

+0

Burada HttpClient 4.3.3 ile bile çalışır. –

0

Daha İyi httpclient en son sürümünü kullanmak. Varsayılan olarak yay dizisi şablonu, başlığı ayarlamaya izin vermez.

1

Bu problemi Michal Foksa'nın yaptığı gibi başka bir şekilde çözdüm. (Bundan önce)

Bunu çözmenin bir yolu, iş parçacığı yerel bir cookiemanager uygulamak ve sistem varsayılanı olarak ayarlamaktır. Bu, RestTemplate çerezlerini cookiemanager ile birlikte yapacak ve talep eden iplik öldükten sonra cookiemanager'ı bırakacaktır.

Selamlar

İlgili konular