diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterFactoryKjb.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterFactoryKjb.java index 977f92f..1b3f0c1 100644 --- a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterFactoryKjb.java +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterFactoryKjb.java @@ -36,6 +36,9 @@ public class HttpAdapterFilterFactoryKjb extends HttpAdapterFilterFactory { case HMAC_SHA256: filter = new HmacSha256VerifyFilterKjb(); break; + case REFLECTALLHEADER: + filter = new ReflectAllHeaderFilter(); + break; default: filter = classForName(type); if (filter == null) { diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterType.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterType.java index c522614..b22dc60 100644 --- a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterType.java +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/HttpAdapterFilterType.java @@ -6,6 +6,7 @@ public enum HttpAdapterFilterType { IPWHITELISTFILTER, ADAPTERALLOWIPLISTFILTER, HMAC_SHA256, + REFLECTALLHEADER, UNKNOWN; public static HttpAdapterFilterType getValue(String type) { diff --git a/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/ReflectAllHeaderFilter.java b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/ReflectAllHeaderFilter.java new file mode 100644 index 0000000..ca0633e --- /dev/null +++ b/src/main/java/com/eactive/eai/adapter/http/dynamic/filter/ReflectAllHeaderFilter.java @@ -0,0 +1,96 @@ +package com.eactive.eai.adapter.http.dynamic.filter; + +import java.util.Enumeration; +import java.util.Properties; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; +import com.eactive.eai.common.util.Logger; +import com.eactive.eai.common.property.PropManager; + +import java.util.Arrays; +import java.util.stream.Stream; + +public class ReflectAllHeaderFilter implements HttpAdapterFilter { + + public ReflectAllHeaderFilter() { + super(); + } + + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String PROPERTIES_GROUP_NAME = "HttpHeaderFilter"; + public static final String HEADER_KEY_NAMES = "AllHeaderFilter.blackList"; + + String[] HttpHeaderRelayBlackList = { + "Content-Length", + "Transfer-Encoding", + "Host", + "Authorization", + "Accept", + "Host", + "Cookie", + "Connection", + "Keep-Alive", + "Proxy-Authenticate", + "Proxy-Authorization", + "TE", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Content-Type", + "Content-Encoding", + "Content-Language", + "Content-Location", + "Content-MD5", + "Expect", + }; + + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + return message; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Object resultMessage, Properties prop, + HttpServletRequest request, HttpServletResponse response) throws Exception { + + logger.debug("doPreFilter ReflectAllHeaderFilter Start."); + + String propValue = PropManager.getInstance().getProperty(PROPERTIES_GROUP_NAME, HEADER_KEY_NAMES, "").trim(); + String[] userSettingBlackList = propValue.split(","); + + if( userSettingBlackList.length > 0 ) { + HttpHeaderRelayBlackList = Stream + .concat(Arrays.stream(HttpHeaderRelayBlackList), Arrays.stream(userSettingBlackList)) + .toArray(String[]::new); + } + + try { + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + + String headerName = headerNames.nextElement(); + String headerValue = request.getHeader(headerName); + + if( StringUtils.equalsAnyIgnoreCase( headerName, HttpHeaderRelayBlackList ) ) { + logger.debug("Skip Processing Key ["+headerName+"], value ["+headerValue+"] in HttpHeaderRelayBlackList"); + continue; + } + + response.setHeader(headerName, headerValue); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + logger.debug("doPreFilter ReflectAllHeaderFilter End."); + + return resultMessage; + } +} +