// the authentication scheme that the client is expected to choose
String expected = null; for (String s: schemes) { if (expected == null) {
expected = s;
} elseif (s.equals("Digest")) {
expected = s;
}
}
// server reply
String reply = authReplyFor(schemes);
System.out.println("====================================");
System.out.println("Expect client to choose: " + expected);
System.out.println(reply);
InetAddress loopback = InetAddress.getLoopbackAddress(); try (ServerSocket ss = new ServerSocket(0, 0, loopback)) {
Client.start(ss.getLocalPort());
// client ---- GET ---> server // client <--- 401 ---- server try (Socket s = ss.accept()) { new HttpHeaderParser().parse(s.getInputStream());
s.getOutputStream().write(reply.getBytes("US-ASCII"));
}
// client ---- GET ---> server // client <--- 200 ---- server
String auth; try (Socket s = ss.accept()) {
HttpHeaderParser mh = new HttpHeaderParser();
mh.parse(s.getInputStream());
s.getOutputStream().write(OKAY.getBytes("US-ASCII"));
auth = mh.getHeaderValue("Authorization").get(0);
}
// check Authorization header if (auth == null) thrownew RuntimeException("Authorization header not found");
System.out.println("Server received Authorization header: " + auth);
String[] values = auth.split(" "); if (!values[0].equals(expected)) thrownew RuntimeException("Unexpected value");
}
}
System.out.println("====================================");
System.out.println("Expect client to fail with 401 Unauthorized");
System.out.println(reply);
InetAddress loopback = InetAddress.getLoopbackAddress(); try (ServerSocket ss = new ServerSocket(0, 0, loopback)) {
Client client = new Client(ss.getLocalPort()); Thread thr = newThread(client);
thr.start();
// client ---- GET ---> server // client <--- 401 ---- client try (Socket s = ss.accept()) { new HttpHeaderParser().parse(s.getInputStream());
s.getOutputStream().write(reply.getBytes("US-ASCII"));
}
// the client should fail with 401
System.out.println("Waiting for client to terminate");
thr.join();
IOException ioe = client.ioException(); if (ioe != null)
System.out.println("Client failed: " + ioe); int respCode = client.respCode(); if (respCode != 0 && respCode != -1)
System.out.println("Client received HTTP response code: " + respCode); if (respCode != HttpURLConnection.HTTP_UNAUTHORIZED) thrownew RuntimeException("Unexpected response code");
}
}
if (ntlmSupported) {
System.out.println("====================================");
System.out.println("NTLM is supported: client would select NTLM: skipping `testNTLM()`..");
} else { // test NTLM only, this should fail with "401 Unauthorized"
testNTLM();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.