9

我正在尝试使用 RestTemplate 和 Jackson json 转换器调用 Restful JSON 服务。现在为了调用服务,我需要传入一个安全 cookie。我可以通过使用 URLConnection 来实现这一点(参见下面的代码)

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

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

这在 RestTemplate 中有什么相似之处?这是我一直用来使用 RestTemplate 调用 Restful 服务的代码片段:

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 调用服务时,我无法弄清楚如何传递安全 cookie。对此的任何帮助都会很棒。

4

3 回答 3

36

我写了一篇博文,解释了如何使用请求标头来做到这一点:

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();
于 2012-04-09T21:57:15.733 回答
4

您可以通过使用自定义连接来访问底层HttpURLConnection使用的底层连接,这使您可以访问底层连接以设置标头、属性等。创建新连接时使用。RestTemplateRestTemplateClientHttpRequestFactoryClientHttpRequestFactoryRestTemplate

特别是,您可以扩展SimpleClientHttpRequestFactory实现并覆盖该prepareConnection()方法:

public class YourClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
  @Override
   protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
     connection.setRequestProperty("SecurityCookie", ssocookie.getValue());
   }
}
于 2011-04-27T03:02:58.293 回答
2

这就是它为我们工作的方式

requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());
于 2016-11-22T03:01:13.270 回答