php hiveserver2,hiveserver2自定义用户认证不生效

hive.server2.authentication

CUSTOM

hive.server2.custom.authentication.class

com.shuangyu.hive.auth.CustomHiveServer2Auth

需要对访问hive做用户密码验证,网上搜了下要自己重写接口,并做如上的配置,重启后发现根本就没生效啊,随便输个用户和密码都能进去。

开始以为是配置错了地方,然后把client端和server端,server2都配置了还是没有任何反应(用的cdh,配置有分client端server端),下面是根据网上教程copy来的验证代码。各位大大帮忙看下,是哪里出问题了。

[mw_shl_code=java,true]package com.shuangyu.hive.auth;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import javax.security.sasl.AuthenticationException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hive.conf.HiveConf;

import org.apache.hive.service.auth.PasswdAuthenticationProvider;

/**

* Description:

* Creator:╰⊱⋛⋋ShuangYu⋌⋚⊰╯

* CreateTime: 2018/2/8.

* Remark:

* Usage:

* Example:

* ✻

*/

public class CustomHiveServer2Auth implements PasswdAuthenticationProvider{

@Override

public void Authenticate(String username, String password)

throws AuthenticationException {

boolean ok = false;

String passMd5 = new MD5().md5(password);

HiveConf hiveConf = new HiveConf();

Configuration conf = new Configuration(hiveConf);

//        String filePath = conf.get("hive.server2.custom.authentication.file");

String filePath  = "/tmp/sljr_hive.conf";

System.out.println("hive.server2.custom.authentication.file [" + filePath + "] ..");

File file = new File(filePath);

BufferedReader reader = null;

try {

reader = new BufferedReader(new FileReader(file));

String tempString = null;

while ((tempString = reader.readLine()) != null) {

String[] datas = tempString.split(",", -1);

if(datas.length != 2) continue;

//ok

if(datas[0].equals(username) && datas[1].equals(passMd5)) {

ok = true;

break;

}

}

reader.close();

} catch (Exception e) {

e.printStackTrace();

throw new AuthenticationException("read auth config file error, [" + filePath + "] ..", e);

} finally {

if (reader != null) {

try {

reader.close();

} catch (IOException e1) {}

}

}

if(ok) {

System.out.println("user [" + username + "] auth check ok .. ");

} else {

System.out.println("user [" + username + "] auth check fail .. ");

throw new AuthenticationException("user [" + username + "] auth check fail .. ");

}

}

//MD5加密

class MD5 {

private MessageDigest digest;

private char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

public MD5() {

try {

digest = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

}

}

public String md5(String str) {

byte[] btInput = str.getBytes();

digest.reset();

digest.update(btInput);

byte[] md = digest.digest();

// 把密文转换成十六进制的字符串形式

int j = md.length;

char strChar[] = new char[j * 2];

int k = 0;

for (int i = 0; i < j; i++) {

byte byte0 = md;

strChar[k++] = hexDigits[byte0 >>> 4 & 0xf];

strChar[k++] = hexDigits[byte0 & 0xf];

}

return new String(strChar);

}

}

}

[/mw_shl_code]

额,配置在server端时链接有报错:

[cloudera@quickstart hive]$ beeline

Beeline version 1.1.0-cdh5.12.0 by Apache Hive

beeline> !connect jdbc:hive2://192.168.10.207:10000/default

scan complete in 3ms

Connecting to jdbc:hive2://192.168.10.207:10000/default

Enter username for jdbc:hive2://192.168.10.207:10000/default: asdf

Enter password for jdbc:hive2://192.168.10.207:10000/default: ***

Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections. Please ask the administrator to check the number of active connections, and adjust hive.server2.thrift.max.worker.threads if applicable.

Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.10.207:10000/default: null (state=08S01,code=0)

我用的是自己的虚拟机,就我一个人用户,所以应该不存在链接过多(链接数配置的1000)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值