Настройка cookie безопасности с помощью RestTemplate - PullRequest
9 голосов
/ 27 апреля 2011

Я пытаюсь вызвать службу Restful JSON, используя RestTemplate и json преобразователь Джексона.Теперь для того, чтобы позвонить в сервис, мне нужно передать куки безопасности.Я могу добиться этого с помощью URLConnection (см. Код ниже)

URL url= new URL("https://XXXXXXXX");

URLConnection yc = url.openConnection();
yc.setRequestProperty("SecurityCookie", ssocookie.getValue());</code>

Какая параллель для этого в RestTemplate?Вот фрагмент кода, который я использовал для вызова Restful Service с использованием RestTemplate:

RestTemplate rest = new RestTemplate();  
InputBean input = new InputBean();  
input.setResource("SampleResource");  
HttpEntity<InputBean > entity = new HttpEntity<InputBean>(input);  
ResponseEntity<OutputBean> response1 = rest.postForEntity(
    "https://XXXXXXXXX", 
    entity, OutputBean.class);</code>

Я не могу понять, как передать cookie безопасности при использовании RestTemplate для вызова сервиса.Любая помощь в этом была бы великолепна.

Ответы [ 3 ]

34 голосов
/ 10 апреля 2012

Я написал сообщение в блоге, в котором объясняется, как это сделать с помощью заголовков запросов:

http://springinpractice.com/2012/04/08/sending-cookies-with-resttemplate/

Вот код:

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());
HttpEntity requestEntity = new HttpEntity(null, requestHeaders);
ResponseEntity rssResponse = restTemplate.exchange(
    "https://jira.example.com/sr/jira.issueviews:searchrequest-xml/18107/SearchRequest-18107.xml?tempMax=1000",
    HttpMethod.GET,
    requestEntity,
    Rss.class);
Rss rss = rssResponse.getBody();
4 голосов
/ 27 апреля 2011

Вы можете получить доступ к базовому HttpURLConnection, используемому RestTemplate, подключив свой RestTemplate к пользовательскому ClientHttpRequestFactory, который позволяет получить доступ к базовому соединению для установки заголовков, свойств и т. Д. . ClientHttpRequestFactory используется RestTemplate при создании новых подключений.

В частности, вы можете расширить реализацию SimpleClientHttpRequestFactory и переопределить метод prepareConnection():

public class YourClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
  @Override
   protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
     connection.setRequestProperty("SecurityCookie", ssocookie.getValue());
   }
}
2 голосов
/ 22 ноября 2016

Вот как это работает у нас

requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());
...