我正在尝试使用 RestTemplate 和 Jackson json 转换器调用 Restful JSON 服务。现在为了调用该服务,我需要传入一个安全 cookie。我可以通过使用 URLConnection 来实现这一点(请参阅下面的代码)
URL url= new URL("https://XXXXXXXX");
URLConnection yc = url.openConnection();
yc.setRequestProperty("SecurityCookie", ssocookie.getValue());
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);
我不知道如何在使用 RestTemplate 调用服务时传递安全 cookie。任何对此的帮助都会很棒。
我写了一篇博客文章,解释了如何使用请求标头来执行此操作:
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();
您可以通过将
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());
}
}
这就是我们的工作方式
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());