On Sun, 29 Sep 2024 16:46:06 GMT, Michael McMahon <[email protected]> wrote:
> This fix relaxes the constraints on user set authentication headers.
> Currently, any user set authentication headers are filtered out, if the
> HttpClient has an Authenticator set. The reason being that the authenticator
> is expected to manage authentication. With this fix, it will be possible to
> use pre-emptive authentication through user set headers, even if an
> authenticator is set. The expected use case is where the authenticator would
> manage either proxy or server authentication and the user set headers would
> manage server authentication if the authenticator is managing proxy (or vice
> versa).
> If the pre-emptive authentication fails, then this behavior is disabled on
> further retries and it would be up to the authenticator to provide the right
> credentials then.
>
> Thanks,
> Michael
The test seems to be missing a scenario where the provided preemptive
credentials are wrong (or obsolete) and the stack then defaults to using the
provided authenticator.
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 90:
> 88: try {
> 89:
> 90: var client = HttpClient.newBuilder()
Ideally should use try-with-resource to also close the client.
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 99:
> 97: var encoded =
> java.util.Base64.getEncoder().encodeToString(plainCreds.getBytes(US_ASCII));
> 98: var badCreds = "user:wrong";
> 99: var encoded1 =
> java.util.Base64.getEncoder().encodeToString(badCreds.getBytes(US_ASCII));
Is some part of the test missing? I don't see where `encoded1` is used.
Also should there be some assertion as to whether `ProxyAuth()` was called or
not?
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 127:
> 125: var client = HttpClient.newBuilder()
> 126: .version(java.net.http.HttpClient.Version.HTTP_1_1)
> 127: .build();
should use try-with-resource to close the client
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 155:
> 153: serverMock.start();
> 154: try {
> 155: var client = HttpClient.newBuilder()
should use try-with-resource to close the client
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 259:
> 257: @Override
> 258: public List<Proxy> select(URI uri) {
> 259: return List.of(new Proxy(Proxy.Type.HTTP, new
> InetSocketAddress("localhost", port)));
It would be better to use `InetAddress.getLoopbackAddress()` rather than
"localhost"
test/jdk/java/net/httpclient/UserAuthWithAuthenticator.java line 282:
> 280: protected PasswordAuthentication getPasswordAuthentication() {
> 281: if (getRequestorType() != RequestorType.SERVER) {
> 282: // We only want to handle proxy authentication here
Suggestion:
// We only want to handle server authentication here
-------------
PR Review: https://git.openjdk.org/jdk/pull/21249#pullrequestreview-2337431223
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781064380
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781059826
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781073209
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781074952
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781084303
PR Review Comment: https://git.openjdk.org/jdk/pull/21249#discussion_r1781086884