diff --git a/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java b/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java index c3d49732d..3c0cbec21 100644 --- a/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java +++ b/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java @@ -362,21 +362,6 @@ public HttpResponse execute() throws IOException { url.append('?').append(query); } - switch (_authType) { - case NO_AUTHENTICATION: - break; - case BASIC_AUTHENTICATION: - builder.authenticator(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password.toCharArray()); - } - }); - break; - case DIGEST_AUTHENTICATION: - throw new UnsupportedOperationException("Digest Authentication is not currently " + "supported"); - } - HttpClient httpClient = null; if(state) { @@ -420,6 +405,16 @@ protected PasswordAuthentication getPasswordAuthentication() { throw new RuntimeException("unknow method " + this.method); } + switch (_authType) { + case NO_AUTHENTICATION: + break; + case BASIC_AUTHENTICATION: + httpRequestBuilder.header("Authorization", getBasicAuthenticationHeader(username, password)); + break; + case DIGEST_AUTHENTICATION: + throw new UnsupportedOperationException("Digest Authentication is not currently " + "supported"); + } + for(Map.Entry> entry : requestHeaders.entrySet()) { entry.getValue().forEach(s -> httpRequestBuilder.header(entry.getKey(),s)); } @@ -427,11 +422,16 @@ protected PasswordAuthentication getPasswordAuthentication() { try { java.net.http.HttpResponse response = httpClient.send(httpRequestBuilder.build(), java.net.http.HttpResponse.BodyHandlers.ofString()); return new HttpResponse(host, port, _isSecure, this.method, response); - } catch (InterruptedException e) { + } catch (Exception e) { throw new IOException(e.getMessage(), e); } } + private static String getBasicAuthenticationHeader(String username, String password) { + String valueToEncode = username + ":" + password; + return "Basic " + Base64.getEncoder().encodeToString(valueToEncode.getBytes()); + } + public String toString() { StringBuilder sb = new StringBuilder(255); sb.append("[REQUEST LINE] -> ").append(_requestLine).append('\n');