1.EMQX文档
2.HTTP的Basic认证
参考资料:HTTP的几种认证方式之BASIC 认证(基本认证)
Basic认证是HTTP的一种权限校验方式。通过HTTP请求资源的响应以401
状态码返回并附带Authorization Required
信息,则表示请求的资源需要进行权限验证。在响应头中的WWW-Authenticate
字段会写明所需认证方式(这里只讨论Basic认证方式)。
Basic认证方式需要将用户名和密码以:
拼接成用户名:密码
的形式,并用Base64加密后放到请求头Authorization
字段中。另外需要加上Basic_
(_为空格)的前缀表示使用 Basic认证,完整写法为Authorization: Basic xxxxxxxxx
。
3.Java发送Basic方式校权的HTTP请求
3.1未携带Basic认证
可以看出响应头提示我们所访问的资源需要进行权限验证,且验证方式为Basic。
3.2携带Basic认证
参考资料:java实现HTTP Basic认证
源码-Java原生http请求:
public static void main(String[] args) throws IOException {
String url = "http://192.168.13.188:18083/api/v4/clients";
URL url1 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url1.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
String authString = "admin:public";
byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
String authStringEnc = new String(authEncBytes);
System.out.println(authStringEnc);
conn.setRequestProperty("Authorization", "Basic " + authStringEnc);
conn.connect();
int status = conn.getResponseCode();
System.out.println("status:\t" + status);
if (status == 200 || status == 500) {
System.out.println("请求服务器" + (status == 200 ? "成功" : "失败"));
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String str = "";
StringBuffer sb = new StringBuffer();
while ((str = reader.readLine()) != null) {
sb.append(str);
}
System.out.println(sb);
}else {
System.out.println("请求服务器失败");
}
}
源码-Hutool Http请求:
public static void main(String[] args) {
String url = "http://192.168.13.188:18083/api/v4/clients";
String authString = "admin:public";
byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes());
String authStringEnc = new String(authEncBytes);
System.out.println(authStringEnc);
HttpResponse response = HttpRequest.get(url)
.header(HttpHeaders.AUTHORIZATION, "Basic " + authStringEnc)
.execute();
System.out.println(response.getStatus() == 200 ? "请求成功" : "请求失败");
System.out.println(response.body());
}