From c93356f79531e4c1954d5f0b877dbfe6d3d13720 Mon Sep 17 00:00:00 2001 From: nicolas Date: Fri, 12 Jan 2018 10:56:51 +0100 Subject: [PATCH] When a request is sent to the querystore, its ip address is found in X-FORWARDED-FOR header. However when going through a proxy, addresses of the client and the proxies are concatenated. This correction keeps only the address of the original client if it is available --- .../session/queryLog/QueryStoreRequestRegistry.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/portal.ejb/src/main/java/org/vamdc/portal/session/queryLog/QueryStoreRequestRegistry.java b/portal.ejb/src/main/java/org/vamdc/portal/session/queryLog/QueryStoreRequestRegistry.java index 80ac050..306d02d 100644 --- a/portal.ejb/src/main/java/org/vamdc/portal/session/queryLog/QueryStoreRequestRegistry.java +++ b/portal.ejb/src/main/java/org/vamdc/portal/session/queryLog/QueryStoreRequestRegistry.java @@ -49,13 +49,18 @@ public Map getQuerystoreProcessors() { * @return */ public String getIpAdress() { - String ipAddress = ServletContexts.instance().getRequest() + // client and proxies IP are concatenated in this header field : client, proxy1, proxy2 ... + String ipAddresses = ServletContexts.instance().getRequest() .getHeader("X-FORWARDED-FOR"); + String clientAddress = ""; - if (ipAddress == null) { - ipAddress = ServletContexts.instance().getRequest().getRemoteAddr(); + if (ipAddresses == null) { + clientAddress = ServletContexts.instance().getRequest().getRemoteAddr(); + }else{ + // keep only original client ip + clientAddress = ipAddresses.split(",")[0]; } - return ipAddress; + return clientAddress; } }