hive添加自定义认证类 CustomHiveServer2Auth.java

package hive.server2.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;  
 
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");  
//                  System.out.println("hive.server2.custom.authentication.file [" + filePath + "] ..");  
                  String filePath = "/usr/lib/hive/conf/userPass.file";
                  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
                           System.out.println("local user:" + datas[0]);
                           System.out.println("local md5:" + datas[1]);
                           System.out.println("client user:" + username);
                           System.out.println("client password:" + password);
                           System.out.println("client passwordmd5:" + passMd5);
                           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[i];  
                                  strChar[k++] = hexDigits[byte0 >>> 4 & 0xf];  
                                  strChar[k++] = hexDigits[byte0 & 0xf];  
                              }  
              return new String(strChar);  
          }  
      }  

  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值