【发布时间】:2021-02-10 23:42:50
【问题描述】:
我必须在我的应用程序发送给另一个应用程序的请求的 cookie 中添加信息, 但似乎没有正确添加。
当我使用 WireShark 检查请求时,我在标头中看到两个 Cookie 标头:
POST /service HTTP/1.1
Accept-Encoding: gzip
Cookie: iam=**************************
Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 128393
Host: host-dev:9999
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.10 (Java/1.8.0_271)
Cookie: JSESSIONID=***********************
Authorization: Basic **************************
(我已经更改了一些信息)
在我的代码中我有这个:
@Service
public class ESignatureSoapConnector extends WebServiceGatewaySupport {
private ObjectFactory objectFactory;
@Autowired
public ESignatureSoapConnector(ESignatureMarshaller marshaller, ConfigurationProperties configurationProperties) throws Exception {
this.setMarshaller(marshaller);
this.setUnmarshaller(marshaller);
this.setDefaultUri(configurationProperties.getBaseUrl());
this.setMessageSender(buildMessageSender(configurationProperties.getUsername(), configurationProperties.getPassword()));
this.objectFactory = new ObjectFactory();
}
public ESignatureResponse signDocument(MTOMFile file, String iamCookieValue) {
ESignature request = new ESignature();
request.setInputDocument(file);
JAXBElement<ESignatureResponse> response = (JAXBElement<ESignatureResponse>) getWebServiceTemplate()
.marshalSendAndReceive(objectFactory.createESignature(request), new WebServiceMessageCallback() {
@Override
public void doWithMessage(WebServiceMessage webServiceMessage) throws IOException, TransformerException {
TransportContext context = TransportContextHolder.getTransportContext();
HttpComponentsConnection connection = (HttpComponentsConnection) context.getConnection();
HttpPost post = connection.getHttpPost();
post.addHeader("Cookie", "iam=" + iamCookieValue);
}
});
return response.getValue();
}
private WebServiceMessageSender buildMessageSender(String username, String password) throws Exception {
...
}
}
我假设我设置 cookie 的方式不正确,但我找不到正确的方法。 每个请求的 cookie 值都不同,这是一个肥皂请求,我在 Spring 中工作
【问题讨论】:
-
没有添加什么?此外,您应该添加一个 cookie(它最终是一个标题,但仍然)。
-
当应该只有一个 Cookie 标头时,我添加的 cookie(值为“iam=****”)创建了第二个 cookie,不同的值由 ; 分隔。 .没有post.addCookie(),我唯一能做的就是.addHeader()
-
然后获取当前值 (
getHeaders),然后追加它,然后是setHeader,而不是addHeader。或者使用 Cookie 管理器设置 Apache HttpClient,并在其中设置一个值,以便将其添加到传出请求中。 -
我尝试先获取标题,但它并没有改变任何东西。由于另一个 cookie (JSESSIONID) 在 cookie 存储中,所以当我执行 getHeaders() 时它不存在,它会将我的 cookie 添加为标题。最好是访问 cookie 存储并添加 cookie,但我找不到如何访问它
标签: spring cookies soap webservicetemplate