Browse Source

AMBARI-18944 - Improve remoteIp in audit log (Wang Yaoxin via jonathanhurley)

Jonathan Hurley 8 years ago
parent
commit
8039a1f6e3

+ 10 - 0
ambari-server/src/main/java/org/apache/ambari/server/utils/RequestUtils.java

@@ -50,6 +50,9 @@ public class RequestUtils {
     if (isRemoteAddressUnknown(ip)) {
     if (isRemoteAddressUnknown(ip)) {
       ip = request.getRemoteAddr();
       ip = request.getRemoteAddr();
     }
     }
+    if (containsMultipleRemoteAddresses(ip)) {
+       ip = ip.substring(0, ip.indexOf(","));
+    }
     return ip;
     return ip;
   }
   }
 
 
@@ -75,6 +78,13 @@ public class RequestUtils {
     return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip);
     return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip);
   }
   }
 
 
+  /**
+   * Checks if ip contains multiple IP addresses
+   */
+  private static boolean containsMultipleRemoteAddresses(String ip) {
+    return ip != null && ip.indexOf(",") > 0;
+  }
+
   /**
   /**
    * Checks if RequestContextHolder contains a valid HTTP request
    * Checks if RequestContextHolder contains a valid HTTP request
    * @return
    * @return

+ 18 - 0
ambari-server/src/test/java/org/apache/ambari/server/utils/RequestUtilsTest.java

@@ -30,6 +30,7 @@ import org.junit.Test;
 public class RequestUtilsTest {
 public class RequestUtilsTest {
 
 
   public static final String REMOTE_ADDRESS = "12.13.14.15";
   public static final String REMOTE_ADDRESS = "12.13.14.15";
+  public static final String REMOTE_ADDRESS_MULTIPLE = "12.13.14.15,12.13.14.16";
 
 
   @Test
   @Test
   public void testGetRemoteAddress() {
   public void testGetRemoteAddress() {
@@ -48,6 +49,23 @@ public class RequestUtilsTest {
     verify(mockedRequest);
     verify(mockedRequest);
   }
   }
 
 
+  @Test
+  public void testGetMultipleRemoteAddress() {
+    // GIVEN
+    HttpServletRequest mockedRequest = createMock(HttpServletRequest.class);
+    expect(mockedRequest.getHeader("X-Forwarded-For")).andReturn(null);
+    expect(mockedRequest.getHeader("Proxy-Client-IP")).andReturn("unknown");
+    expect(mockedRequest.getHeader("WL-Proxy-Client-IP")).andReturn("");
+    expect(mockedRequest.getHeader("HTTP_CLIENT_IP")).andReturn("unknown");
+    expect(mockedRequest.getHeader("HTTP_X_FORWARDED_FOR")).andReturn(REMOTE_ADDRESS_MULTIPLE);
+    replay(mockedRequest);
+    // WHEN
+    String remoteAddress = RequestUtils.getRemoteAddress(mockedRequest);
+    // THEN
+    assertEquals(REMOTE_ADDRESS, remoteAddress);
+    verify(mockedRequest);
+  }
+
   @Test
   @Test
   public void testGetRemoteAddressFoundFirstHeader() {
   public void testGetRemoteAddressFoundFirstHeader() {
     // GIVEN
     // GIVEN