Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RestTemplate设置安全cookie_Java_Spring_Cookies_Resttemplate - Fatal编程技术网

Java 使用RestTemplate设置安全cookie

Java 使用RestTemplate设置安全cookie,java,spring,cookies,resttemplate,Java,Spring,Cookies,Resttemplate,我试图使用RestTemplate和Jackson JSON转换器调用Restful JSON服务。现在为了调用服务,我需要传入一个安全cookie。我可以通过使用URLConnection实现这一点(参见下面的代码) 在RestTemplate中,这有什么相似之处?下面是我一直在使用RestTemplate调用Restful服务的代码片段: RestTemplate rest = new RestTemplate(); InputBean input = new InputBean();

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

在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 rest=new RestTemplate();
InputBean输入=新的InputBean();
input.setResource(“SampleResource”);
HttpEntity=新的HttpEntity(输入);
ResponseEntity response1=rest.postfortity(
"https://XXXXXXXXX", 
实体,OutputBean.class)

我不知道如何在使用RestTemplate调用服务时传递安全cookie。这方面的任何帮助都将非常有用。

您可以通过将
restemplate
与自定义连接起来,访问
restemplate
使用的底层
HttpURLConnection
,该自定义连接允许您访问底层连接以设置标题、属性、,等。
clienthtprequestfactory
在创建新连接时由
restemplate
使用

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

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

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

代码如下:

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

这就是它对我们的作用

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

似乎是自apache http 4.0以来的
HttpEntity
。有没有办法继续使用它?澄清一下,这是Spring的HttpEntity类,而不是Apache的.Oops!您能否为您的示例提供所需的库和导入?我对Android+spring项目越来越着迷了。到处都是相同的类名!这是正确的。getForObject()和相关方法实际上只是更通用的exchange()方法的方便方法。这个链接现在对我来说已经不存在了,但可以在Internet存档中找到:我在
RestTemplate
上也有类似的问题,我对
ClientHttpRequestFactory
的实现有疑问。如果可能的话,看看你能不能帮我。我被这件事困扰了一段时间。任何帮助都将不胜感激。这个答案已经过时,另一个答案更好。
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());