Springboot使用hikari连接池进行Kerberos认证访问Impala

news2024/12/23 15:01:31

springboot-kerberos-hikari-impala

Springboot使用hikari连接池并进行Kerberos认证访问Impala的演示项目

Springboot使用hikari连接池并进行Kerberos认证访问Impala的demo地址:https://github.com/Raray-chuan/springboot-kerberos-hikari-impala

修改后的Hikari源码地址:https://github.com/Raray-chuan/HikariCP-4.0.3

springboot版本:2.7.5
HikariCP版本:4.0.3
impala驱动版本:2.6.3
CDH集群的Hadoop版本:3.0.0-cdh6.3.2

1. Hikari源码改造,以支持Kerberos认证

如果想了解为什么要修改Hikari来支持Kerberos认证,以及如何修改Hikari源码,请到下面地址查看:https://github.com/Raray-chuan/HikariCP-4.0.3 , 此项目中有详细的readme解答

如果不想手动修改源码以及编译,而且HikariCP版本为4.0.3,在项目的resources目录中有编译好的HikariCP-4.0.3.jar可供使用

2. 准备测试的hive数据

1.在hive中创建表与导入数据:

create database test_xichuan_db;

CREATE TABLE test_xichuan_db.test_xichuan_table (
  start_time String,
  id STRING
)
row format delimited fields terminated by ','
stored as textfile;


测试数据:sample.txt
20211107,id1
20211207,id2
20211210,id3
20211214,id4
20211220,id5
20211222,id6
20211228,id7
20211101,id7
20211227,id4
20211228,id3
20211229,id2
20211230,id1


LOAD DATA LOCAL INPATH '/home/xichuan/sample.txt'
OVERWRITE INTO TABLE test_xichuan_db.test_xichuan_table;

2.在impala中查询数据

select * from test_xichuan_db.test_xichuan_table;

3.项目说明

此项目是一个很简单的springboot的demo项目,项目结构以及每个注解就不详细说了,而且项目中是通过principal+keytab的方式进行认证的,Kerberos如何使用,请参考:https://raray-chuan.github.io/xichuan_note/#/docs/big-data/kerberos/CDH6.3.2集成Kerberos

此项目很简单,我们在DataSourceConfig中自定义dataSource这个spring bean,这样我们使用mybatis进行impala查询的时候,会自动获取到dataSource这个bean,就可以不用修改代码了。

我们修改了Hikari的源码,在HikariConfig类中添加了Kerberos四个参数,分别是:

authenticationType:安全验证的类型,如果值是"kerberos",则进行Kerberos认证,如果为null,则不进行认证
krb5FilePath:krb5.conf文件的路径
principal:principal的名称
keytabPath:对应principal的keytab的路径

这样我们在创建HikariDataSource的时候,就可以使用HikariDataSource(HikariConfig configuration)这个构造方法创建即可将Kerberos参数传入其中。DataSourceConfig代码如下:

package com.xichuan.dev.config;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.sql.*;

/**
 * @Author Xichuan
 * @Date 2022/11/1 15:15
 * @Description
 */
@Configuration
public class DataSourceConfig {
    private Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);

    @Value("${authentication.type}")
    private String authenticationType;

    @Value("${authentication.kerberos.krb5FilePath}")
    private String krb5FilePath;

    @Value("${authentication.kerberos.principal}")
    private String principal;

    @Value("${authentication.kerberos.keytabPath}")
    private String keytabPath;

    /**
     * inint datasource
     * @return
     */
    @Bean
    public DataSource dataSource(DataSourceProperties dataSourceProperties) throws SQLException {
        HikariConfig config = new HikariConfig();
        //kerberos config
        config.setAuthenticationType(authenticationType);
        config.setKrb5FilePath(krb5FilePath);
        config.setPrincipal(principal);
        config.setKeytabPath(keytabPath);

        //jdbc and pool config
        config.setJdbcUrl(dataSourceProperties.getUrl());
        config.setDriverClassName(dataSourceProperties.getDriverClassName());
        config.setUsername(dataSourceProperties.getUsername());
        config.setPassword(dataSourceProperties.getPassword());
        config.setPoolName(dataSourceProperties.getPoolName());
        config.setReadOnly(dataSourceProperties.isReadOnly());
        config.setAutoCommit(dataSourceProperties.isAutoCommit());
        config.setMaximumPoolSize(dataSourceProperties.getMaximumPoolSize());
        //maxLifetime 池中连接最长生命周期
        config.setMaxLifetime(dataSourceProperties.getMaxLifetime());
        //等待来自池的连接的最大毫秒数 30000
        config.setIdleTimeout(dataSourceProperties.getIdleTimeout());
        //连接将被测试活动的最大时间量
        config.setValidationTimeout(dataSourceProperties.getValidationTimeout());


        HikariDataSource dataSource = new HikariDataSource(config);
        logger.info("init new dataSource: {}", dataSource);
        return dataSource;
    }
}

4. 修改application-prod.yml中的参数,以符合自己的测试环境

# datasource and pool
# 修改为自己的impala链接地址
datasource.xichuan.url=jdbc:impala://node01:21050/;AuthMech=1;KrbRealm=XICHUAN.COM;KrbHostFQDN=node01;KrbServiceName=impala
datasource.xichuan.driver-class-name=com.cloudera.impala.jdbc41.Driver
datasource.xichuan.username=
datasource.xichuan.password=
datasource.xichuan.pool-name=xichuan-pool
datasource.xichuan.read-only=false
datasource.xichuan.auto-commit=true
datasource.xichuan.maximum-pool-size=3
# 此处是演示值,让connection的最长生存时长为35秒
datasource.xichuan.max-lifetime=35000
datasource.xichuan.idle-timeout=10000
datasource.xichuan.validation-timeout=5000


# kerberos
# 此值为null,则不进行Kerberos认证,如果此值为kerberos,则进行kerberos认证
authentication.type=kerberos
# 修改为服务器中的krb5.conf地址,或者是本地的krb5.conf地址
authentication.kerberos.krb5FilePath=D:\\development\\license_dll\\krb5.conf
# 修改为自己的principle名称
authentication.kerberos.principal=xichuan/admin@XICHUAN.COM
# 修改为服务器中的keytab地址,或者是本地的keytab地址
authentication.kerberos.keytabPath=D:\\development\\license_dll\\xichuan.keytab

5. 项目验证演示

1.启动项目

我们可以看出刚启动项目后,Hikari连接池已经进行了Kerberos认证,并创建了三个Connection

2.访问数据

访问接口:http://localhost:18080/lot_operation/all_data

我们可以看出访问访问数据一切正常

3.验证HikariPool中Connection失效后,自动Kerberos验证并创建新的Connection

我们设置的datasource.xichuan.max-lifetime=35000,所以每过35秒HikariPool中的Connection就会失效,并重新生成新的Connection,我们查看日志:

通过日志可以看出,HikariPool中的Connection每过35秒就会失效,但HikariPool会通过Kerberos认证,并创建新的Connection添加到HikariPool中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解4种类型的爬虫技术

聚焦网络爬虫是“面向特定主题需求”的一种爬虫程序,而通用网络爬虫则是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分,主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。 增量抓取意…

sqli-labs闯关

less-01: less-08: less-11: less-18: less-19: less-20: Sqli-labs项目地址—Github 使用HackBar插件 less-01: Sqli-labs前20关均为数字型注入 Sqli-labs前四关较为类似以less-01为模板 将网址导入HackBar中: 1.根据提示,输入http://127.0.0.…

laragon 为 php 安装 Xdebug 扩展

众所周知,php 自带的 var_dump() 输出格式很不直观 而 laragon 作为很好的 windos 下开发环境很受欢迎,本文就介绍如何快速为 laragon 的 php 安装 Xdebug,方便开发调试 一:启动开发环境,在任意可访问 php 页面中输出 …

Matlab中fdatool结合STM32F4设计滤波器

数字滤波器的原理 1.从功能上分;低通、带通、高通、带阻。滤波器口诀:低通滤高频;高通滤低频;带通滤两边;带阻阻中间; 2.从实现方法上分:FIR、IIR 3.从设计方法上来分:Chebyshev(切比雪夫&…

哪家证券公司能做股票的量化交易?

一般证券公司都是能做股票的量化交易的,证券公司主流使用的量化软件一般是P-trade或QMT。其中P-trade普通版更适合没有太多编程经验的投资者使用,可以直接应用软件中现成的程序进行交易,QMT适合专业的投资者,有一定学编程语言基础…

34k*16 薪,3年自动化测试历经3轮面试成功拿下字节Offer....

前言 转眼过去,距离读书的时候已经这么久了吗?,从18年5月本科毕业入职了一家小公司,到现在快4年了,前段时间社招想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了字节…

国产信创替代迫在眉睫,如何选择合适的信创文件传输系统?

当今世界正经历着百年未有之大变局,随着时代发展进步,党的二十大也对于加快建设数字中国做出了重要部署。只有牵制住自主创新这么一个关键点,以关键核心技术突破推动实现高水平科技自立自强,才能牢牢掌握数字经济发展的主动权。自…

手写Mybatis:第11章-流程解耦,封装结果集处理器

文章目录 一、目标:结果集处理器二、设计:结果集处理器三、实现:结果集处理器3.1 工程结构3.2 结果集处理器关系图3.3 出参参数处理3.3.1 结果映射Map3.3.2 结果映射封装3.3.3 修改映射器语句类3.3.4 映射构建器助手3.3.5 语句构建器调用助手…

Java“牵手”京东商品评论数据接口方法,京东商品评论接口,京东商品评价接口,行业数据监测,京东API实现批量商品评论内容数据抓取示例

京东平台商品评论数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、评论内容、评论日期、评论图片、追评内容等详细信息 。 获取商品评论接口API是一种用于获取…

无涯教程-JavaScript - DCOUNTA函数

描述 DCOUNTA函数返回列表或数据库中符合您指定条件的列中非空白单元格的计数。 此函数与DCOUNT函数相似,不同之处在于DCOUNTA函数对所有非空白单元进行计数。 DCOUNT函数仅计算包含数值的单元格。 语法 DCOUNTA (database, field, criteria)争论 Argument描述Required/Op…

参编三大金融国标,奇富科技以技术促行业规范化演进

近期,由中国互联网金融协会领导制定的《互联网金融智能风险防控技术要求》《互联网金融个人网络消费信贷信息披露》《互联网金融个人身份识别技术要求》三项国家标准颁布,由国家市场监督管理总局、国家标准化管理委员会发布,奇富科技作为核心…

sqli-labs例题复现

less-1.1 在源码中$id$_GET[id];之后加入如下代码: if(preg_match(/select\b[\s\S]*\bfrom/is,$id)){die(SQL Injection); }; 1.分析正则 第一个\b匹配select单词边界,\s\S匹配到所有字符,最后一个\b匹配到from单词边界。 select...from…

超详细!80个Python入门实例,代码清晰拿来即用,学习提升必备

对于大部分Python学习者来说,核心知识基本已经掌握了,但"纸上得来终觉浅,绝知此事要躬行",要想完全掌握Python,还得靠实践应用。 今天给大家分享80个Python入门实例,都是基础实例,经典实用&…

问道管理:什么是大盘?大盘股又是什么?

聊到股市就免不了聊到大盘,有些新进场的投资者对此或许带有疑问,什么是大盘?我们所说的大盘股又是什么?关于这些,问道管理为我们准备了以下参考内容。 什么是大盘? 大盘,主要是指股市的整体行情…

最新secureCRT成功安装教程含资源链接

下载压缩包解压,如下双击安装: 打开按步骤导入就可以了 secureCRT 正常打开连上ubuntu的效果: 界面还没配置,还需根据个人爱好配置一下。 时间就是金钱,按下面链接操作完会自动弹出下载窗口,下载大概要三四…

算法leetcode|76. 最小覆盖子串(rust重拳出击)

文章目录 76. 最小覆盖子串:样例 1:样例 2:样例 3:提示:进阶: 分析:在这里插入图片描述 题解:rust:go:c:python:java: 76.…

动态贴纸、美颜SDK与AR:创造独特的互动体验

目前,动态贴纸、美颜SDK、增强现实(AR)等技术是比较热门的话题,它们所结合的新兴玩法更是收到大家推崇,正潜移默化的改变我们与数字世界互动的方式。 一、动态贴纸:个性化互动的开始 动态贴纸&#xff0c…

智能聊天机器人,帮你排解烦恼!

在繁忙的生活中,你是否曾经感到压力和烦恼无处宣泄?现在,我们为你带来了一款全新的智能聊天机器人,它能够倾听你的心声,理解你的情绪,为你提供安慰和支持,让你告别烦恼,重拾快乐生活…

ToBeWritten之基于ATTCK的运营流程与实践

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

Mysql底层数据结构为什么选择B+树

索引底层采用什么数据结构,为什么使用B树而不是其他数据结构: (1)如果采用二叉树:使用递增字段作为索引时,二叉树会退化成链表,查找效率太低 (2)如果采用红黑树&#xf…