一尘不染

具有HttpUrlConnection的抢占式基本身份验证?

java

使用HttpUrlConnection使用抢占式基本HTTP身份验证的最佳方法是什么。(假设现在我不能使用HttpClient)。

编辑以澄清问题:我使用Base64编码在请求标头中正确设置了un /
pw。是否需要设置任何其他标志或属性,或者我是否在为请求的基本身份验证头设置抢先式基本身份验证所需的全部信息?


阅读 229

收藏
2020-09-08

共1个答案

一尘不染

如果您使用的是Java 8或更高版本,java.util.Base64则可以使用:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
String encoded = Base64.getEncoder().encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8));  //Java 8
connection.setRequestProperty("Authorization", "Basic "+encoded);

然后正常使用连接。

如果您使用的是Java 7或更低版​​本,则需要一种将String编码为Base64的方法,例如:

byte[] message = (username+":"+password).getBytes("UTF-8");
String encoded = javax.xml.bind.DatatypeConverter.printBase64Binary(message);

是的,这就是您使用基本身份验证所要做的全部。上面的用于设置Request属性的代码应在打开连接之后以及获取Input或Output流之前立即完成。

2020-09-08