使用RestTemplate设置安全cookie

时间:2011-04-26 20:29:22

标签: java spring cookies resttemplate

我正在尝试使用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 Service的代码片段:

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。对此的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:34)

我写了一篇博文,解释了如何使用请求标题执行此操作:

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

答案 1 :(得分:4)

您可以使用自定义ClientHttpRequestFactoryHttpURLConnection连接RestTemplate来访问RestTemplate使用的基础ClientHttpRequestFactory,这样您就可以访问基础连接以设置标题,属性等。RestTemplate在创建新连接时由prepareConnection()使用。

特别是,您可以扩展SimpleClientHttpRequestFactory实施并覆盖public class YourClientHttpRequestFactory extends SimpleClientHttpRequestFactory { @Override protected void prepareConnection(HttpURLConnection connection, String httpMethod) { connection.setRequestProperty("SecurityCookie", ssocookie.getValue()); } } 方法:

{{1}}

答案 2 :(得分:2)

这就是它对我们有用的方式

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