在Wildfly 10.1.0.Final中使用kerberize Impala数据源的正确方法是什么?

时间:2019-08-20 08:35:13

标签: java wildfly kerberos cloudera impala

几周以来,我正在研究一个cloudera集群,它使用了kerberos身份验证功能。

Wildfly服务器需要连接到这个cloudera集群,因为它需要执行一些impala查询,这是通过wildfly数据源完成的。

现在,我的问题是:向此impala数据源添加kerberos身份验证机制的最佳方法是什么?

我尝试将连接网址更改为somethinng

jdbc:impala://XXXXXXX:21050/impala?AuthMech=1;KrbRealm=AAA.BBB.CC;KrbHostFQDN=my-proxy;KrbServiceName=impala;LogLevel=6;LogPath=/tmp/

(我检查了客户隐私)

然后我像这样将新的安全域传递给了impala数据源

<security>
      <security-domain>security-impala</security-domain>
</security>

此类安全域声明如下:

<security-domain name="security-impala" cache-type="default">

   <authentication>

     <login-module code="org.jboss.security.negotiation.KerberosLoginModule" flag="required" module="org.jboss.security.negotiation">

       <module-option name="useKeyTab" value="true"/>
       <module-option name="keyTab" value="/path/to/my.keytab"/> 
       <module-option name="principal" value="principal@REALM.COM"/>
       <module-option name="useTicketCache" value="false"/>
       <module-option name="debug" value="true"/>
       <module-option name="refreshKrb5Config" value="true"/>
       <module-option name="isInitiator" value="true"/>
       <module-option name="doNotPrompt" value="true"/> 

     </login-module>

   </authentication>

</security-domain>

我还尝试使用配置单元jdbc驱动程序,并使用看起来像这样的代码直接从Java代码直接执行操作(不使用数据源):

UserGroupInformation ugi = 
UserGroupInformation.loginUserFromKeytabAndReturnUGI(user, keytabfile);
Connection con = (Connection) ugi.doAs(new 
PrivilegedExceptionAction<Object>() {
      public Object run() {
        Connection tcon = null;
        try {
          tcon = DriverManager.getConnection(connectionURL, user, 
passwd);
        } catch (SQLException e) {}
        return tcon;
      }
});

如果创建一个jar文件,该文件可以正常工作,我可以在其中手动导入所有需要的依赖项。

问题是我并不是真的想要这个解决方案,因为我将不得不使wildfly中的其他WAR使用此JAR文件作为一个独立的过程,这效率很低。另外,当我尝试将代码集成到WAR中时,当我包含WAR时,似乎总是缺少一些Maven依赖 hive-jdbc,2.0.0依赖于pom文件

0 个答案:

没有答案
相关问题