有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用RestTemplate设置安全cookie

我试图使用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。这方面的任何帮助都会很好


共 (3) 个答案

  1. # 1 楼答案

    这就是它对我们的作用

    requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());
    
  2. # 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();
    
  3. # 3 楼答案

    通过将RestTemplate与自定义^{}连接起来,可以访问RestTemplate使用的底层HttpURLConnection,该自定义^{RestTemplate使用ClientHttpRequestFactory

    特别是,您可以扩展^{}实现并重写prepareConnection()方法:

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