话说,是springmvc连接hive没啥问题,那如果是kerberos认证的hive怎么连
<beans:bean id="jdbcListener" class="com.bonc.bm.core.listener.JdbcListener">
<beans:constructor-arg name="kerberos" value="true"></beans:constructor-arg>
</beans:bean>
<beans:bean id="hiveDriver" class="org.apache.hive.jdbc.HiveDriver" />
<beans:bean id="hiveDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource" depends-on="jdbcListener">
<beans:constructor-arg name="driver" ref="hiveDriver"/>
<beans:constructor-arg name="url" value="${hive.url}"/>
</beans:bean>
<beans:bean id="hiveTemplete" class="org.springframework.jdbc.core.JdbcTemplate">
<beans:property name="dataSource" ref="hiveDataSource"></beans:property>
</beans:bean>
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* author:SK
* date:2018/9/26
* name:
*/
public class JdbcListener {
private Boolean kerberos;
public JdbcListener(Boolean kerberos){
this.kerberos = kerberos;
if (kerberos){
System.setProperty("java.security.krb5.conf", "krb5.conf");
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication" , "kerberos" );
// 这样我们就不需要交互式输入密码了
configuration.set("keytab.file" , "bcc.keytab" );
configuration.setBoolean("hadoop.security.authorization", true);
// 这个可以理解成用户名信息,也就是Principal
configuration.set("kerberos.principal" , "hive/big@admin" );
try {
UserGroupInformation. setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab("hive/big@admin",
"bcc.keytab");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
其中 krb5.conf有权限限制
-r-------- 1 bcc.keytab
-rw-r--r-- 1 krb5.conf