diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java index b76f27c64e..2afb41a0bd 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java @@ -69,15 +69,20 @@ public class ProxyConfiguration * * * @param url + * @param copyRequestHeaders * @param requestHeaderExcludes + * @param copyResponseHeaders * @param responseHeaderExcludes * @param cacheEnabled */ - public ProxyConfiguration(URL url, Set requestHeaderExcludes, + public ProxyConfiguration(URL url, boolean copyRequestHeaders, + Set requestHeaderExcludes, boolean copyResponseHeaders, Set responseHeaderExcludes, boolean cacheEnabled) { this.url = url; + this.copyResponseHeaders = copyResponseHeaders; this.requestHeaderExcludes = requestHeaderExcludes; + this.copyResponseHeaders = copyResponseHeaders; this.responseHeaderExcludes = responseHeaderExcludes; this.cacheEnabled = cacheEnabled; } @@ -108,7 +113,9 @@ public class ProxyConfiguration final ProxyConfiguration other = (ProxyConfiguration) obj; return Objects.equal(url, other.url) + && Objects.equal(copyRequestHeaders, other.copyRequestHeaders) && Objects.equal(requestHeaderExcludes, other.requestHeaderExcludes) + && Objects.equal(copyResponseHeaders, other.copyResponseHeaders) && Objects.equal(responseHeaderExcludes, other.responseHeaderExcludes) && Objects.equal(cacheEnabled, other.cacheEnabled); } @@ -122,8 +129,8 @@ public class ProxyConfiguration @Override public int hashCode() { - return Objects.hashCode(url, requestHeaderExcludes, responseHeaderExcludes, - cacheEnabled); + return Objects.hashCode(url, copyRequestHeaders, requestHeaderExcludes, + copyResponseHeaders, responseHeaderExcludes, cacheEnabled); } /** @@ -138,7 +145,9 @@ public class ProxyConfiguration //J- return Objects.toStringHelper(this) .add("url", url) + .add("copyRequestHeaders", copyRequestHeaders) .add("requestHeaderExcludes", requestHeaderExcludes) + .add("copyResponseHeaders", copyResponseHeaders) .add("responseHeaderExcludes", responseHeaderExcludes) .add("cacheEnabled", cacheEnabled) .toString(); @@ -201,12 +210,42 @@ public class ProxyConfiguration return cacheEnabled; } + /** + * Method description + * + * + * @return + */ + public boolean isCopyRequestHeaders() + { + return copyRequestHeaders; + } + + /** + * Method description + * + * + * @return + */ + public boolean isCopyResponseHeaders() + { + return copyResponseHeaders; + } + //~--- fields --------------------------------------------------------------- /** Field description */ @XmlElement(name = "cache-enabled") private boolean cacheEnabled = true; + /** Field description */ + @XmlElement(name = "copy-request-headers") + private boolean copyRequestHeaders = true; + + /** Field description */ + @XmlElement(name = "copy-response-headers") + private boolean copyResponseHeaders = true; + /** Field description */ @XmlElement(name = "exclude") @XmlElementWrapper(name = "request-header-excludes") diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java index adfe7751e2..998a97cb2a 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java @@ -120,7 +120,16 @@ public class ProxyServlet extends HttpServlet con = createConnection(configuration, request); - copyRequestHeaders(configuration, request, con); + if (configuration.isCopyRequestHeaders()) + { + logger.trace("copy request headers"); + copyRequestHeaders(configuration, request, con); + } + else + { + logger.trace("skip copy of request headers"); + } + con.connect(); int responseCode = con.getResponseCode(); @@ -128,7 +137,15 @@ public class ProxyServlet extends HttpServlet logger.trace("resonse returned status code {}", responseCode); response.setStatus(responseCode); - copyResponseHeaders(configuration, con, response); + if (configuration.isCopyResponseHeaders()) + { + logger.trace("copy response headers"); + copyResponseHeaders(configuration, con, response); + } + else + { + logger.trace("skip copy of response headers"); + } copyContent(con, response);