diff --git a/src/shogun2-core/src/main/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequest.java b/src/shogun2-core/src/main/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequest.java index 1a12bad95..64f431730 100644 --- a/src/shogun2-core/src/main/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequest.java +++ b/src/shogun2-core/src/main/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequest.java @@ -43,6 +43,11 @@ public class MutableHttpServletRequest extends HttpServletRequestWrapper { */ private Map customParameters; + /** + * Holds custom header mapping + */ + private Map customHeaders; + /** * */ @@ -61,6 +66,7 @@ public MutableHttpServletRequest(HttpServletRequest request) { this.customRequestURI = request.getRequestURI(); this.customParameters = new HashMap( request.getParameterMap()); + this.customHeaders = new HashMap(); } /** @@ -205,6 +211,17 @@ public void setParameter(String key, String value) { this.addParameter(key, value); } + /** + * @param key The header name (without a trailing colon `:`) + * @param value The header value + */ + public void setHeader(String key, String value) { + if (!StringUtils.isEmpty(this.getHeader(key))) { + this.removeHeader(key); + } + customHeaders.put(key, value); + } + /** * @param key * @param value @@ -231,6 +248,15 @@ public void removeParameter(String key) { } } + /** + * @param key + */ + public void removeHeader(String key) { + if (customHeaders.get(key) != null) { + customHeaders.remove(key); + } + } + /** * */ @@ -252,6 +278,19 @@ public Map getParameterMap() { return customParameters; } + /** + * + */ + @Override + public String getHeader(String name) { + String headerValue = customHeaders.get(name); + // Check custom headers first + if (headerValue != null){ + return headerValue; + } + return ((HttpServletRequest) getRequest()).getHeader(name); + } + /** * */ diff --git a/src/shogun2-core/src/test/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequestTest.java b/src/shogun2-core/src/test/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequestTest.java index 5525dc2ce..bfa60c46b 100644 --- a/src/shogun2-core/src/test/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequestTest.java +++ b/src/shogun2-core/src/test/java/de/terrestris/shogun2/util/interceptor/MutableHttpServletRequestTest.java @@ -32,6 +32,10 @@ public class MutableHttpServletRequestTest { private static final String CUSTOM_REQUEST_PARAMETER_VALUE = "Kagawa"; + private static final String CUSTOM_REQUEST_HEADER_KEY = "Authorization"; + + private static final String CUSTOM_REQUEST_HEADER_VALUE = "U2hpbmppOkthZ2F3YQ=="; + private MutableHttpServletRequest mutableRequest; @Before @@ -89,6 +93,12 @@ public void add_query_parameter_array() { mutableRequest.getParameter(CUSTOM_REQUEST_PARAMETER_KEY)); } + @Test + public void set_custom_header() { + mutableRequest.setHeader(CUSTOM_REQUEST_HEADER_KEY, CUSTOM_REQUEST_HEADER_VALUE); + assertEquals(CUSTOM_REQUEST_HEADER_VALUE, mutableRequest.getHeader(CUSTOM_REQUEST_HEADER_KEY)); + } + @Test public void get_parameter_map() { Map params = mutableRequest.getParameterMap();