diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml
index 480b5780c..1d52ff719 100644
--- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml
+++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/application-context.xml
@@ -100,6 +100,8 @@
+
+
@@ -117,6 +119,7 @@
+
@@ -125,11 +128,13 @@
+
+
@@ -137,6 +142,7 @@
+
@@ -144,6 +150,7 @@
+
@@ -152,6 +159,7 @@
+
@@ -160,12 +168,14 @@
+
+
@@ -180,6 +190,7 @@
+
@@ -194,6 +205,7 @@
+
@@ -207,6 +219,7 @@
+
diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml
index 2aff94363..86e4be23c 100644
--- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml
+++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/user-context.xml
@@ -52,6 +52,7 @@
+
diff --git a/openid-connect-server/src/main/java/org/mitre/mdc/MultiMDCFilter.java b/openid-connect-server/src/main/java/org/mitre/mdc/MultiMDCFilter.java
new file mode 100644
index 000000000..9f3c1043f
--- /dev/null
+++ b/openid-connect-server/src/main/java/org/mitre/mdc/MultiMDCFilter.java
@@ -0,0 +1,37 @@
+package org.mitre.mdc;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.springframework.web.filter.GenericFilterBean;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+
+public class MultiMDCFilter extends GenericFilterBean {
+
+ private static final Logger log = LoggerFactory.getLogger(MultiMDCFilter.class);
+
+ private final RemoteAddressMDCFilter remoteAddressMDCFilter;
+ private final SessionIdMDCFilter sessionIdMDCFilter;
+
+ public MultiMDCFilter() {
+ this.remoteAddressMDCFilter = new RemoteAddressMDCFilter();
+ this.sessionIdMDCFilter = new SessionIdMDCFilter();
+ }
+
+ @Override
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
+ throws IOException, ServletException
+ {
+ log.info("--- Initialized MultiMDCFilter ---");
+ remoteAddressMDCFilter.doFilter(servletRequest);
+ sessionIdMDCFilter.doFilter(servletRequest);
+ filterChain.doFilter(servletRequest, servletResponse);
+ MDC.clear();
+ }
+
+}
diff --git a/openid-connect-server/src/main/java/org/mitre/mdc/RemoteAddressMDCFilter.java b/openid-connect-server/src/main/java/org/mitre/mdc/RemoteAddressMDCFilter.java
new file mode 100644
index 000000000..45b6beb46
--- /dev/null
+++ b/openid-connect-server/src/main/java/org/mitre/mdc/RemoteAddressMDCFilter.java
@@ -0,0 +1,44 @@
+package org.mitre.mdc;
+
+import org.slf4j.MDC;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+public class RemoteAddressMDCFilter {
+
+ private static final String[] IP_HEADER_CANDIDATES = {
+ "X-Forwarded-For",
+ "Proxy-Client-IP",
+ "WL-Proxy-Client-IP",
+ "HTTP_X_FORWARDED_FOR",
+ "HTTP_X_FORWARDED",
+ "HTTP_X_CLUSTER_CLIENT_IP",
+ "HTTP_CLIENT_IP",
+ "HTTP_FORWARDED_FOR",
+ "HTTP_FORWARDED",
+ "HTTP_VIA",
+ "REMOTE_ADDR"
+ };
+
+ private static final String REMOTE_ADDR = "remoteAddr";
+
+ public void doFilter(ServletRequest servletRequest) {
+ MDC.put(REMOTE_ADDR, getRemoteAddr((HttpServletRequest) servletRequest));
+ }
+
+ private String getRemoteAddr(HttpServletRequest request) {
+ if (request.getRemoteAddr() != null) {
+ return request.getRemoteAddr();
+ }
+
+ for (String header: IP_HEADER_CANDIDATES) {
+ String ipList = request.getHeader(header);
+ if (ipList != null && ipList.length() != 0 && !"unknown".equalsIgnoreCase(ipList)) {
+ return ipList.split(",")[0];
+ }
+ }
+ return "";
+ }
+
+}
diff --git a/openid-connect-server/src/main/java/org/mitre/mdc/SessionIdMDCFilter.java b/openid-connect-server/src/main/java/org/mitre/mdc/SessionIdMDCFilter.java
new file mode 100644
index 000000000..85f95de87
--- /dev/null
+++ b/openid-connect-server/src/main/java/org/mitre/mdc/SessionIdMDCFilter.java
@@ -0,0 +1,24 @@
+package org.mitre.mdc;
+
+import org.slf4j.MDC;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+public class SessionIdMDCFilter {
+
+ private static final int SIZE = 12;
+ private static final String SESSION_ID = "sessionID";
+
+ public void doFilter(ServletRequest servletRequest) {
+ HttpServletRequest req = (HttpServletRequest) servletRequest;
+ if (req.getSession() != null) {
+ String id = req.getSession().getId();
+ if (id != null && id.length() > SIZE) {
+ id = id.substring(0, SIZE);
+ }
+ MDC.put(SESSION_ID, id);
+ }
+ }
+
+}