1、HttpURLConnection 简介
sun.net.www.protocol.http.HttpURLConnection是jdk中默认执行请求时使用。此HttpURLConnection 支持多种权限认证方案,Negotiate(Kerberos)、Basic、Digest认证,本节主要介绍Negotiate(Kerberos)。
2、示例代码
- 开启kerberos的服务
- 配置krb5.conf文件
import sun.misc.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @author
* @description
* @create 2021-07-13 17:20
**/
public class URLTest {
public static void main(String[] args) throws IOException {
if (args.length > 0) {
System.setProperty("java.security.auth.login.config", args[0]);
}
HttpURLConnection connection = null;
URL url = new URL("http://master-55:50070");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream is = connection.getInputStream();
byte[] bytes = IOUtils.readFully(is, -1, true);
String str = new String(bytes);
System.out.println("返回结果" + str);
is.close();
}
}
3、认证方案
- 执行kinit
kinit -kt /admin.keytab admin
java -jar admin.jar
-
传递参数
1、 创建文件http.conf
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
useTicketCache=false
keyTab=" /admin.keytab"
principal="admin@HADOOP.COM";
};
java -jar admin.jar /http.conf
4、扩展
序号 | 配置项 | 说明 |
---|---|---|
1 | sun.security.krb5.principal | 覆盖配置文件中的principal |
2 | {user.home}{file.separator}krb5.keytab | 如果配置文件中没有配置keytab路径时默认位置 |
3 | libdefaults.default_keytab_name | krb5.conf中的默认配置项 |