2011-04-26 7 views
8

RestTemplate과 Jackson json convertor를 사용하여 Restful JSON 서비스를 호출하려고합니다. 이제 서비스를 호출하기 위해 보안 쿠키를 전달해야합니다. URLConnection을 사용하여이 작업을 수행 할 수 있습니다 (아래 코드 참조).RestTemplate을 사용하여 보안 쿠키를 설정하십시오.

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

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

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> 

내가 서비스를 호출하는 RestTemplate를 사용하는 동안 보안 쿠키를 전달하는 방법을 알아낼 수 없습니다 : 여기 RestTemplate를 사용하여 RESTful 서비스를 호출하기 위해 사용하고있는 코드 조각이다. 이것에 대한 도움이 될 것입니다.

답변

4

당신은 연결하여 RestTemplate에서 사용하는 기본 HttpURLConnection에 액세스 할 수 있습니다 RestTemplate 새로운 연결을 생성 할 때 ClientHttpRequestFactoryRestTemplate에 의해 사용되는 등 헤더 속성을 설정하는 기본 연결에 액세스 할 수있는 사용자 정의 ClientHttpRequestFactory, 최대. 특히

, 당신은 SimpleClientHttpRequestFactory 구현을 확장하고 prepareConnection() 방법을 재정의 할 수

public class YourClientHttpRequestFactory extends SimpleClientHttpRequestFactory { 
    @Override 
    protected void prepareConnection(HttpURLConnection connection, String httpMethod) { 
    connection.setRequestProperty("SecurityCookie", ssocookie.getValue()); 
    } 
} 
+0

+1 우수합니다. 보석처럼 일했다. .. 고마워!! –

+0

'ClientHttpRequestFactory' 구현에 의문을 제기하고있는'RestTemplate'에 대해서도 비슷한 질문이 있습니다. [https://stackoverflow.com/questions/25698072/simpleclienthttprequestfactory-vs-httpcomponentsclienthttprequestfactory-for-htt] 가능하다면 나를 도울 수 있는지보십시오. 나는 이것에 잠시 붙어있다. 어떤 도움을 주시면 감사하겠습니다. – AKIWEB

+0

이 답변은 구식입니다. 다른 답변이 더 좋습니다. –

29

나는이 사용하는 요청 헤더 수행하는 방법을 설명하는 블로그 게시물 작성 :

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

아파치 http 4.0 이후'HttpEntity' [추상이다] (https://hc.apache.org/httpcomponents-core-4.3.x/httpcore/apidocs/org/apache/http/HttpEntity.html)처럼 보입니다. 이것을 계속 사용하는 방법이 있습니까? –

+0

명확히하기 위해, 이것은 Apache의 것보다 Spring의 HttpEntity 클래스이다. –

+0

죄송합니다. 귀하의 사례에 필요한 도서관 및 수입품을 제공 할 수 있습니까? 나는 안드로이드 + 스프링 프로젝트에 열중하고있다. 어디서나 동일한 클래스 이름! –

2

이것이 우리를 위해 일한 방법입니다.

requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue()); 
관련 문제