@Override public String getRemoteAddr() { boolean isUsageOfXForwardedHeaderEnabled = ninjaProperties.getBooleanWithDefault( Context.NINJA_PROPERTIES_X_FORWARDED_FOR, false); if (isUsageOfXForwardedHeaderEnabled) { String forwardHeader = getHeader(X_FORWARD_HEADER); if (forwardHeader != null) { if (forwardHeader.contains(",")) { // sometimes the header is of form client ip,proxy 1 ip,proxy 2 ip,...,proxy n ip, // we just want the client forwardHeader = StringUtils.split(forwardHeader, ',')[0].trim(); } try { // If ip4/6 address string handed over, simply does pattern validation. InetAddress.getByName(forwardHeader); return forwardHeader; } catch (UnknownHostException e) { // give up } } } // fallback to the real remote address return getRealRemoteAddr(); }