Repository: knox
Updated Branches:
  refs/heads/v0.5.1 49c0083b8 -> efc27089e


KNOX-464: Location headers have wrong hostname when used behind load balancer


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/9aa5ee4d
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/9aa5ee4d
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/9aa5ee4d

Branch: refs/heads/v0.5.1
Commit: 9aa5ee4d778032ce2c1ec258d4bc89d1b7ee2a55
Parents: 49c0083
Author: Kevin Minder <kevin.min...@hortonworks.com>
Authored: Fri Oct 31 13:10:47 2014 -0400
Committer: Larry McCay <lmc...@hortonworks.com>
Committed: Fri Nov 21 15:58:04 2014 -0500

----------------------------------------------------------------------
 .../filter/rewrite/impl/UrlRewriteResponse.java | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/9aa5ee4d/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java
----------------------------------------------------------------------
diff --git 
a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java
 
b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java
index 05795cb..00eea7b 100644
--- 
a/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java
+++ 
b/gateway-provider-rewrite/src/main/java/org/apache/hadoop/gateway/filter/rewrite/impl/UrlRewriteResponse.java
@@ -40,7 +40,9 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.InetAddress;
 import java.net.URISyntaxException;
+import java.net.UnknownHostException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -175,11 +177,25 @@ public class UrlRewriteResponse extends 
GatewayResponseWrapper implements Params
     }
   }
 
+  // KNOX-464: Doing this because Jetty only returns the string version of the 
IP address for request.getLocalName().
+  // Hopefully the local hostname will be cached so this will not be a 
significant performance hit.
+  // Previously this was an inline request.getServerName() but this ended up 
mixing the hostname from the Host header
+  // and the local port which was making load balancer configuration difficult 
if not impossible.
+  private String getRequestLocalHostName() {
+    String hostName = request.getLocalName();
+    try {
+      hostName = InetAddress.getByName( hostName ).getHostName();
+    } catch( UnknownHostException e ) {
+      // Ignore it and use the original hostname.
+    }
+    return hostName;
+  }
+
   private String getGatewayParam( String name ) {
     if( "url".equals( name ) ) {
-      return request.getScheme() + "://" + request.getServerName() + ":" + 
request.getLocalPort() + request.getContextPath();
+      return request.getScheme() + "://" + getRequestLocalHostName() + ":" + 
request.getLocalPort() + request.getContextPath();
     } else if( "address".equals( name ) ) {
-      return request.getServerName() + ":" + request.getLocalPort();
+      return getRequestLocalHostName() + ":" + request.getLocalPort();
     } else if( "path".equals( name ) ) {
       return request.getContextPath();
     } else {

Reply via email to