diff --git a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java index 01e9147d04..b6520fb35a 100644 --- a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java +++ b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java @@ -2,7 +2,7 @@ * #%L * Alfresco Remote API * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited + * Copyright (C) 2005 - 2019 Alfresco Software Limited * %% * This file is part of the Alfresco software. * If the software was purchased under a paid Alfresco license, the terms of @@ -181,6 +181,22 @@ public class BufferedResponse implements WrappingWebScriptResponse res.reset(); } + /* (non-Javadoc) + * @see org./alfresco.web.scripts.WebScriptResponse#resetjava.lang.String) + */ + public void reset(String preserveHeadersPattern) + { + if (outputStream != null) + { + outputStream = null; + } + else if (outputWriter != null) + { + outputWriter = null; + } + res.reset(preserveHeadersPattern); + } + /* * (non-Javadoc) * @see org.alfresco.web.scripts.WebScriptResponse#setCache(org.alfresco.web.scripts.Cache) diff --git a/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java index 0e4fb8c752..e3bb07f362 100644 --- a/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java +++ b/src/main/java/org/alfresco/repo/web/scripts/RepositoryContainer.java @@ -2,7 +2,7 @@ * #%L * Alfresco Remote API * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited + * Copyright (C) 2005 - 2019 Alfresco Software Limited * %% * This file is part of the Alfresco software. * If the software was purchased under a paid Alfresco license, the terms of @@ -97,6 +97,7 @@ public class RepositoryContainer extends AbstractRuntimeContainer private int memoryThreshold = 4 * 1024 * 1024; // 4mb private long maxContentSize = (long) 4 * 1024 * 1024 * 1024; // 4gb private TempStoreOutputStreamFactory streamFactory = null; + private String preserveHeadersPattern = null; private Class[] notPublicExceptions = new Class[] {}; private Class[] publicExceptions = new Class[] {}; @@ -139,6 +140,11 @@ public class RepositoryContainer extends AbstractRuntimeContainer } } + public void setPreserveHeadersPattern(String preserveHeadersPattern) + { + this.preserveHeadersPattern = preserveHeadersPattern; + } + /** * @param repository Repository */ @@ -515,7 +521,8 @@ public class RepositoryContainer extends AbstractRuntimeContainer { // Reset the request and response in case of a transaction retry bufferedReq.reset(); - bufferedRes.reset(); + // REPO-4388 don't reset specified headers + bufferedRes.reset(preserveHeadersPattern); script.execute(bufferedReq, bufferedRes); } } diff --git a/src/main/resources/alfresco/project-remote-api.properties b/src/main/resources/alfresco/project-remote-api.properties index 5ae37f8369..c76b37a1c2 100644 --- a/src/main/resources/alfresco/project-remote-api.properties +++ b/src/main/resources/alfresco/project-remote-api.properties @@ -22,3 +22,5 @@ # # See issue REPO-2575 for details. alfresco.restApi.basicAuthScheme=false +# REPO-4388 allow CORS headers in transaction response +webscripts.transaction.preserveHeadersPattern=Access-Control-.* \ No newline at end of file diff --git a/src/main/resources/alfresco/public-rest-context.xml b/src/main/resources/alfresco/public-rest-context.xml index a99d06aa86..95eed313d3 100644 --- a/src/main/resources/alfresco/public-rest-context.xml +++ b/src/main/resources/alfresco/public-rest-context.xml @@ -66,6 +66,7 @@ + diff --git a/src/main/resources/alfresco/web-scripts-application-context.xml b/src/main/resources/alfresco/web-scripts-application-context.xml index 7bf6b4e3b7..1cb6c41f62 100644 --- a/src/main/resources/alfresco/web-scripts-application-context.xml +++ b/src/main/resources/alfresco/web-scripts-application-context.xml @@ -175,6 +175,7 @@ +