Repository: camel Updated Branches: refs/heads/camel-2.17.x ac501457d -> 36f857888
CAMEL-10238: Restore Cookies and HOST headers in securityhandler for subscriptions Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/59b67d2d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/59b67d2d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/59b67d2d Branch: refs/heads/camel-2.17.x Commit: 59b67d2d3b56da9fde7e283255b524bad57c3e99 Parents: ac50145 Author: Dhiraj Bokde <dhira...@yahoo.com> Authored: Thu Aug 25 00:28:58 2016 -0700 Committer: Dhiraj Bokde <dhira...@yahoo.com> Committed: Thu Aug 25 08:47:46 2016 -0700 ---------------------------------------------------------------------- .../client/SalesforceSecurityHandler.java | 36 ++++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/59b67d2d/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java index 8df28de..11c8cbe 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/SalesforceSecurityHandler.java @@ -30,6 +30,8 @@ import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.client.api.Result; import org.eclipse.jetty.client.util.BufferingResponseListener; +import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; import org.slf4j.Logger; @@ -208,24 +210,36 @@ public class SalesforceSecurityHandler implements ProtocolHandler { if (copy) { newRequest = httpClient.copyRequest(request, request.getURI()); newRequest.method(request.getMethod()); + HttpFields headers = newRequest.getHeaders(); + // copy cookies and host for subscriptions to avoid '403::Unknown Client' errors + for (HttpField field : request.getHeaders()) { + HttpHeader header = field.getHeader(); + if (HttpHeader.COOKIE.equals(header) || HttpHeader.HOST.equals(header)) { + headers.add(header, field.getValue()); + } + } } else { newRequest = request; } conversation.setAttribute(AUTHENTICATION_RETRIES_ATTRIBUTE, ++retries); - LOG.debug("Retry attempt {} on authentication error for {}", retries, request); + Object originalRequest = conversation.getAttribute(AUTHENTICATION_REQUEST_ATTRIBUTE); + LOG.debug("Retry attempt {} on authentication error for {}", retries, originalRequest != null ? originalRequest : newRequest); - // update currentToken - String currentToken = session.getAccessToken(); - if (client != null) { - // update client cache for this and future requests - client.setAccessToken(currentToken); - client.setInstanceUrl(session.getInstanceUrl()); - client.setAccessToken(newRequest); - } else { - // plain request not made by an AbstractClientBase - newRequest.header(HttpHeader.AUTHORIZATION, "OAuth " + currentToken); + // update currentToken for original request + if (originalRequest == null) { + + String currentToken = session.getAccessToken(); + if (client != null) { + // update client cache for this and future requests + client.setAccessToken(currentToken); + client.setInstanceUrl(session.getInstanceUrl()); + client.setAccessToken(newRequest); + } else { + // plain request not made by an AbstractClientBase + newRequest.header(HttpHeader.AUTHORIZATION, "OAuth " + currentToken); + } } // send new async request with a new delegate