当前位置: 首页 > news >正文

springboot2.7集成es8 https方式绕过证书访问集群

版本说明

项目Value
spring-boot2.7.13
es8.12.2

配置文件

spring:
   elasticsearch:
     uris: https://192.168.1.110:30920
     username: elastic
     password: 123456

依赖文件

子pom.xml引入elasticsearch-java依赖

      <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.12.2</version>
        </dependency>

如果出现版本问题,父pom.xml修改依赖声明

      <jakarta-json.version>2.0.1</jakarta-json.version>
      <elasticsearch.version>8.12.2</elasticsearch.version>

   
    <dependencyManagement>
       <dependencies>
       <dependency>
                <groupId>jakarta.json</groupId>
                <artifactId>jakarta.json-api</artifactId>
                <version>${jakarta-json.version}</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
                <version>${elasticsearch.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

配置类


import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.StrUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import com.manlan.common.http.URLInfo;
import com.manlan.common.http.URLUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.ssl.SSLContextBuilder;
import org.elasticsearch.client.RestClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.net.ssl.SSLContext;
import java.util.List;

@Configuration
@Slf4j
public class ElasticSearchConfig {

    @Value("${spring.elasticsearch.uris}")
    private String uris;

    @Value("${spring.elasticsearch.username}")
    private String username;

    @Value("${spring.elasticsearch.password}")
    private String password;

    @Bean
    public RestClient restClient() throws Exception {
        List<String> urlList = StrUtil.split(uris, StrPool.COMMA);
        HttpHost[] httpHosts = new HttpHost[urlList.size()];
        for (int i = 0; i < urlList.size(); i++) {
            URLInfo urlInfo = URLUtil.str2UrlInfo(urlList.get(i));
            httpHosts[i] = new HttpHost(urlInfo.getHost(), urlInfo.getPort(), urlInfo.getProtocol());
        }

        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

        SSLContext sslContext = SSLContextBuilder.create()
            .loadTrustMaterial((chain, authType) -> true)
            .build();

        return RestClient.builder(httpHosts)
            .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder
                .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                .setSSLContext(sslContext)
                .setDefaultCredentialsProvider(credentialsProvider))
            .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
                .setConnectTimeout(5000)
                .setSocketTimeout(60000)).build();
    }


    @Bean
    public ElasticsearchClient elasticsearchClient() throws Exception {
        RestClient restClient = restClient();
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        return new ElasticsearchClient(transport);
    }


}

工具类

public class URLUtil extends cn.hutool.core.util.URLUtil {

    public static URLInfo str2UrlInfo(String url) {
        if (!StrUtil.startWithAny(url, "https://", "http://")) {
            url = HTTP + url;
        }
        URL urlForHttp = toUrlForHttp(url);
        int port = urlForHttp.getPort();
        String protocol = urlForHttp.getProtocol();
        if (port == -1 && StrUtil.equals("https", protocol)) {
            port = 443;
        }
        if (port == -1 && StrUtil.equals("http", protocol)) {
            port = 80;
        }
        return new URLInfo(protocol, urlForHttp.getHost(), port);
    }

}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class URLInfo {
    private String protocol;
    private String host;
    private Integer port;
}

相关文章:

  • [游戏开发][Unity] 导出Xcode工程,完成调试与发布
  • 【linux】Debian访问Debian上的共享目录
  • wireshark windows 抓包https
  • HarmonyOS开发:超详细介绍如何开源静态共享包,实现远程依赖
  • 美易官方:美股调整即将到来?
  • 蓝桥杯C++大学B组一个月冲刺记录2024/3/19
  • Git常见命令
  • python爬虫实战——抖音
  • 京东云主机+京美建站SaaS版
  • 使用Cloudflare来给wordpress网站图片自动压缩加速
  • 从基础入门到学穿C++
  • IT系统可观测性
  • 算法——贪心算法
  • Elasticsearch:从 Java High Level Rest Client 切换到新的 Java API Client
  • Layui表格复选框下一页后保持选中,table复选框checkbox跨页保持复选状态
  • [QJS xmake] 非常简单地在Windows下编译QuickJS!
  • 第十三届蓝桥杯省赛CC++ 研究生组
  • Python-GEE绘制DEM精美图片
  • 某小厂java后端初面,记录一下
  • Python 实现1~100之间的偶数求和
  • 航行警告:渤海海峡黄海北部执行军事任务,禁止驶入
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获
  • 过半中国上市公司去年都在“扩编”,哪些公司人效最高
  • 江西省文化和旅游厅厅长梅亦已任省委宣传部副部长
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多