【问题标题】:Setting Security cookie using RestTemplate使用 RestTemplate 设置安全 cookie
【发布时间】:2011-08-13 08:33:26
【问题描述】:

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

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

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

这在 RestTemplate 中有何相似之处?这是我用来调用 Restful 服务的代码 sn-p:

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

【问题讨论】:

    标签: java spring cookies resttemplate


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 似乎 HttpEntity is abstract 自 apache http 4.0 以来。有没有办法继续使用它?
      • 澄清一下,这是 Spring 的 HttpEntity 类而不是 Apache 的。
      • 糟糕!您能否为您的示例提供所需的库和导入?我对 Android + spring 项目变得疯狂。到处都是相同的类名!
      • 没错。 getForObject() 和相关方法实际上只是更通用的 exchange() 方法的便捷方法。
      • 该链接现在对我来说已失效,但可以在 Internet 档案中找到:web.archive.org/web/20150320081025/http://springinpractice.com/…
      【解决方案3】:

      您可以通过将您的RestTemplate 与自定义ClientHttpRequestFactory 连接来访问RestTemplate 使用的底层HttpURLConnection,这样您就可以访问底层连接以设置标题、属性等。ClientHttpRequestFactoryRestTemplate 在创建新连接时使用。

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

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

      【讨论】:

      • 我在RestTemplate 上也有类似的问题here,我对ClientHttpRequestFactory 的实现有疑问。如果可能的话,看看你是否可以帮助我。我坚持了一段时间。任何帮助将不胜感激。
      • 这个答案已经过时 - 另一个答案更好。
      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 2016-09-11
      • 2013-01-06
      • 1970-01-01
      • 2019-06-17
      • 2017-11-24
      • 2017-07-13
      • 2020-05-17
      相关资源
      最近更新 更多