kerberos认证

                                       kerberos认证

剧情摘要:要为星巴克做一个项目,星巴克要求比较严格,必须使用指定服务器部署。验证方式使用ticketcache,ticketcache,ticketcache模式。

前置条件:宿主机初始化kerberos的客户端。krb5.conf,缓存文件的所在地址,用户名,hive的地址 ,端口,

principal。

主代码如下:

 

  Configuration config = new Configuration();
        System.setProperty("sun.security.krb5.debug", "true");
        System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
        Config.refresh();

        config.set("hadoop.security.authentication", "Kerberos");
        KerberosName name = new KerberosName("1");
        KerberosName.resetDefaultRealm();

        System.out.println(name.getDefaultRealm());
        UserGroupInformation.setConfiguration(config);
        try {
            UserGroupInformation ugi = UserGroupInformation.getUGIFromTicketCache("{cache文件的地址}", "用户名klist 可以获取");
            ugi.doAs(new PrivilegedAction() {
                @Override
                public Object run() {
                    Connection conn = null;
                    Statement stmt = null;
                    ResultSet resultSet = null;
                    String url = "jdbc:hive2://" + ip + ":" + port + "/" + databases + ";principal={这是hive 的principal}";
                    try {
                        Class.forName("org.apache.hive.jdbc.HiveDriver");
                        conn = DriverManager.getConnection(url);
                        stmt = conn.createStatement();
                        String sql = "show databases";
                        resultSet = stmt.executeQuery(sql);
                        while (resultSet.next()) {
                            System.out.println(resultSet.getString(1));
                        }
                    } catch (SQLException | ClassNotFoundException e) {
                        e.printStackTrace();
                    } finally {
                        try {
                            conn.close();
                            stmt.close();
                            resultSet.close();
                        } catch (Exception e) {

                        }
                    }
                    return null;
                }
            });

需要注意几点:

 1 debug模式要打开 System.setProperty("sun.security.krb5.debug", "true");

2 缓存文件要修改权限chmod 666 文件

 

你可能感兴趣的:(kerberos,kerberos)