Java | 基于Kerberos认证对接华为云Elasticsearch

news/2025/2/27 8:05:13

可以通过华为官方提供的Java客户端,来实现基于Kerberos认证访问和操作华为云Elasticsearch;亦可以使用更加通用的开源Elasticsearch Java客户端bboss,来实现基于Kerberos认证访问和操作华为云Elasticsearch。

本文介绍使用bboss实现基于Kerberos认证访问和操作华为云Elasticsearch的方法。

bboss_3">1. bboss介绍

bboss是一个高性能高兼容性的Elasticsearch java客户端框架:
在这里插入图片描述
更多bboss介绍,可以访问文档了解:https://esdoc.bbossgroups.com/#/README

bboss_7">2. 集成bboss

集成bboss非常简单,只需在项目中导入bboss对应的maven坐标即可:

<dependency>
    <groupId>com.bbossgroups.plugins</groupId>
    <artifactId>bboss-datatran-jdbc</artifactId>
    <version>7.3.5</version>
</dependency>

实际bboss版本号可以参考文档获取:
https://esdoc.bbossgroups.com/#/changelog

3. 配置和使用Elasticsearch数据源

在项目中导入bboss maven坐标后,定义基于Kerberos认证的Elasticsearch数据源以及通过ClientInterface验证数据源:

java">		Map properties = new HashMap();
        /**
         * 配置Elasticsearch数据源参数,这里只设置必须的配置项,更多配置参考文件:
         * https://gitee.com/bboss/elasticsearchdemo/blob/master/src/main/resources/application.properties
         */
        //定义Elasticsearch数据源名称:esDS,后续通过esDS获取对应数据源的客户端API操作和访问Elasticsearch
        properties.put("elasticsearch.serverNames","esDS");
        //es服务器地址和端口,多个用逗号分隔
        properties.put("esDS.elasticsearch.rest.hostNames","192.168.137.1:8200");
        //是否在控制台打印dsl语句,log4j组件日志级别为INFO或者DEBUG
        properties.put("esDS.elasticsearch.showTemplate","true");
        //集群节点自动发现,关闭服务发现机制
        properties.put("esDS.elasticsearch.discoverHost","false");

        //Kerberos安全认证配置--开始
        
        properties.put("esDS.http.kerberos.serverRealmPath","/elasticsearch/serverrealm");//配置华为云Elasticsearch服务端Princpal查询服务地址
        properties.put("esDS.http.kerberos.useSubjectCredsOnly","false");
        //华为云Elasticsearch krb5.conf文件,由华为提供
        properties.put("esDS.http.kerberos.krb5Location","C:/environment/es/8.13.2/elasticsearch-8.13.2/config/krb5.conf");
        //华为云Elasticsearch jaas.conf文件,由华为提供
        properties.put("esDS.http.kerberos.loginConfig","C:/environment/es/8.13.2/elasticsearch-8.13.2/config/jaas.conf");

        //配置登录模块名称,与华为云Elasticsearch jaas.conf文件中的模块名称一致
        properties.put("esDS.http.kerberos.loginContextName","ESClient");
        
        //配置是否debug Kerberos认证详细日志
        properties.put("esDS.http.kerberos.debug","true");

        //Kerberos安全认证配置--结束
        
        //启动和初始化Elasticsearch数据源
        ElasticSearchBoot.boot(properties);
        
        //通过Elasticsearch数据源名称esDS获取对应数据源的客户端API,操作和访问Elasticsearch
        //可以反复根据数据源名称esDS,调用下面的方法获取ClientInterface接口实例,始终返回单实例多线程安全的ClientInterface对象
        ClientInterface clientInterface = ElasticSearchHelper.getRestClientUtil("esDS");
        
        //验证客户端:通过Elasticsearch rest服务获取ES集群信息
        String result = clientInterface.executeHttp("/?pretty", ClientInterface.HTTP_GET);
        logger.info(result);
        
        //验证客户端:通过API获取ES集群配置参数
        logger.info(clientInterface.getClusterSettings());

        //验证客户端:通过API判断索引demo是否存在
        boolean exist = clientInterface.existIndice("demo");

        logger.info(exist+"");
        //验证客户端:通过API从索引demo获取文档id为1的文档数据(String报文)
        String doc = clientInterface.getDocument("demo","1");

        logger.info(doc+"");

        //验证客户端:通过API从索引demo获取文档id为1的文档数据(or mapping示例:返回Map结构的数据,亦可以转换为PO对象)
        Map mapdoc = clientInterface.getDocument("demo","1",Map.class);

基于配置Kerberos认证实现代码非常简洁,只需在平常数据源参数配置的基础上,增加Kerberos认证相关的参数即可。上述代码中涉及的华为云Kerberos配置文件krb5.conf和jaas.conf,由华为云Elasticsearch提供,这里不单独介绍,需要注意一下:http.kerberos.loginContextName参数对应的值需与jaas.conf配置文件中认证模块名称一致,这里是ESClient。

下面是一个jaas.conf配置内容样例:

ESClient {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="C:/environment/es/8.13.2/elasticsearch-8.13.2/config/elastic.keytab"
  principal="elastic/admin@BBOSSGROUPS.COM"
  useTicketCache=false
  storeKey=true
  debug=false;
};

其中的elastic.keytab文件由华为云Elasticsearch提供即可。更多ClientInterface api使用方法,可以访问下面参考资料中提供的链接了解。

本文对应的代码源码工程下载地址:

码云 https://gitee.com/bboss/eshelloword-booter
Github https://github.com/bbossgroups/eshelloword-booter

对应的Kerberos认证Java Demo CustormInitAndBootKerberosAuth.java

4. 参考资料

Elasticsearch文档增删改查操作介绍 https://esdoc.bbossgroups.com/#/document-crud

高性能elasticsearch ORM开发库使用介绍 https://esdoc.bbossgroups.com/#/development

快速开始bboss https://esdoc.bbossgroups.com/#/quickstart

开发交流 https://esdoc.bbossgroups.com/#/supportus


http://www.niftyadmin.cn/n/5869772.html

相关文章

2024年10月中科院一区SCI-雪橇犬优化算法Sled Dog Optimizer -附Matlab免费代码

引言 本期介绍了一种新的仿生元启发式算法——雪橇犬优化算法Sled Dog Optimizer&#xff0c;SDO。SDO的灵感主要来自雪橇犬的各种行为模式。重点通过模拟狗拉雪橇、训练和退役行为的过程&#xff0c;构建数学模型。该算法于2024年10月最新发表在JCR1区&#xff0c;中科院1区S…

winfrom的progressBar 鼠标移上去显示 进度条的时间

需求描述&#xff1a; 播放IPC摄像头&#xff08;海康、大华&#xff09;的录像回放&#xff0c;视频窗口下方有个进度条&#xff0c;能显示当前录像播放的进度&#xff0c;点击进度条能将视频跳转到指定的时间点继续播放... 现在需要再进度条上显示视频的时间&#xff0c;用来…

SSM个人交友网站

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

力扣——零钱兑换

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 类似于“完全平方数” 设金额 i i i所需的最少个数是 d p [ i ] dp[i] dp[i] 则&#xff1a; d p [ i ] m i n { d p [ i ] , d p [ i − c o i n s [ j ] ] 1 } dp[i] min\{ dp[i],dp[i-coins[j]] 1…

总结一下Java中的线程池的面试问题

部分内容来源&#xff1a;JavaGuide 使用ThreadPoolExecutor代码示例 package com.example.threadpool.Test;import org.apache.catalina.filters.RemoteIpFilter; import org.springframework.stereotype.Component;import java.util.concurrent.ArrayBlockingQueue; import …

JavaScript算法-合并两个有序链表

合并两个有序链表 描述 将两个已按升序排列的链表合并为一个新的升序链表&#xff0c;并返回该链表。 示例&#xff1a; 输⼊&#xff1a;1->3->5, 2->4->6 输出&#xff1a;1->2->3->4->5->6前置知识 递归链表 思路 使⽤递归的方式来实现&…

深入探讨K8s资源管理和性能优化

#作者&#xff1a;曹付江 文章目录 前言&#xff1a;1&#xff0e;监控 Kubernetes 集群的资源利用率1.1 Prometheus1.2 Kubernetes 度量服务器1.3 Grafana1.4 自定义指标 2. 识别资源瓶颈2.1. 监控工具2.2. 性能剖析2.3 Kubernetes 事件和日志2.4. 群集自动扩展2.5. 负载测试…

Lua的table类型的增删改查操作

增: 方法一:直接赋值 local t {} -- 创建一个空表-- 添加键值对 t["name"] "Lua" -- 添加字符串键 t[1] "Hello" -- 添加数字键print(t["name"]) -- 输出: Lua print(t[1]) -- 输出: Hello 方法二:使用table.insert…