diff --git a/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java b/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java index 55e450c0ed..527d238c3c 100644 --- a/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java +++ b/handler-proxy/src/main/java/io/netty/handler/proxy/HttpProxyHandler.java @@ -68,7 +68,7 @@ public final class HttpProxyHandler extends ProxyHandler { ByteBuf authz = Unpooled.copiedBuffer(username + ':' + password, CharsetUtil.UTF_8); ByteBuf authzBase64 = Base64.encode(authz, false); - authorization = new AsciiString(authzBase64.toString(CharsetUtil.US_ASCII)); + authorization = new AsciiString("Basic " + authzBase64.toString(CharsetUtil.US_ASCII)); authz.release(); authzBase64.release(); @@ -131,7 +131,7 @@ public final class HttpProxyHandler extends ProxyHandler { } if (authorization != null) { - req.headers().set(HttpHeaderNames.AUTHORIZATION, authorization); + req.headers().set(HttpHeaderNames.PROXY_AUTHORIZATION, authorization); } return req; diff --git a/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java b/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java index 6097f75d39..69071ffdf1 100644 --- a/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java +++ b/handler-proxy/src/test/java/io/netty/handler/proxy/HttpProxyServer.java @@ -35,6 +35,7 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.HttpVersion; import io.netty.util.CharsetUtil; +import io.netty.util.internal.StringUtil; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -86,15 +87,18 @@ final class HttpProxyServer extends ProxyServer { boolean authzSuccess = false; if (username != null) { - CharSequence authz = req.headers().get(HttpHeaderNames.AUTHORIZATION); + CharSequence authz = req.headers().get(HttpHeaderNames.PROXY_AUTHORIZATION); if (authz != null) { - ByteBuf authzBuf64 = Unpooled.copiedBuffer(authz, CharsetUtil.US_ASCII); + String[] authzParts = StringUtil.split(authz.toString(), ' ', 2); + ByteBuf authzBuf64 = Unpooled.copiedBuffer(authzParts[1], CharsetUtil.US_ASCII); ByteBuf authzBuf = Base64.decode(authzBuf64); - authz = authzBuf.toString(CharsetUtil.US_ASCII); + + String expectedAuthz = username + ':' + password; + authzSuccess = "Basic".equals(authzParts[0]) && + expectedAuthz.equals(authzBuf.toString(CharsetUtil.US_ASCII)); + authzBuf64.release(); authzBuf.release(); - String expectedAuthz = username + ':' + password; - authzSuccess = expectedAuthz.equals(authz); } } else { authzSuccess = true;