设为首页 加入收藏

TOP

java与es8实战之五:SpringBoot应用中操作es8(带安全检查:https、账号密码、API Key)(六)
2023-09-09 10:25:59 】 浏览:119
Tags:java es8 SpringBoot 应用中 安全检 https API Key
ttpAsyncClientBuilder .setSSLContext(buildSSLContext()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE); // 用builder创建RestClient对象 RestClient client = RestClient .builder(hosts) .setHttpClientConfigCallback(callback) .setDefaultHeaders(headers) .build(); return new RestClientTransport(client, new JacksonJsonpMapper()); } @Bean public ElasticsearchClient clientByApiKey() throws Exception { ElasticsearchTransport transport = getElasticsearchTransport(apikey, toHttpHost()); return new ElasticsearchClient(transport); } }
  • 上述代码有以下几处需要注意
  1. 这个配置类为业务代码提供了两个服务bean,作用是操作es,这两个服务bean分别由clientByPasswdclientByApiKey两个方法负责提供
  2. 名为getElasticsearchTransport的方法有两个,分别负责配置两种鉴权方式:账号密码和apiKey
  3. 设置证书的操作被封装在buildSSLContext方法中,在创建ElasticsearchTransport对象的时候会用到

编码:业务类

  • 既然两个ElasticsearchClient对象都已经注册到Spring环境,那么只要在业务类中注入就能用来操作es了

  • 新建业务类ESService.java,如下,可见通过Resource注解选择了账号密码鉴权的ElasticsearchClient对象

package com.bolingcavalry.security.service;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.IOException;

@Service
public class ESService {

    @Resource(name="clientByPasswd")
    private ElasticsearchClient elasticsearchClient;

    public void addIndex(String name) throws IOException {
        elasticsearchClient.indices().create(c -> c.index(name));
    }

    public boolean indexExists(String name) throws IOException {
        return elasticsearchClient.indices().exists(b -> b.index(name)).value();
    }

    public void delIndex(String name) throws IOException {
        elasticsearchClient.indices().delete(c -> c.index(name));
    }
}
  • 至此,基本功能算是开发完成了,接下来编写单元测试代码,验证能否成功操作es8

编码:单元测试

  • 新增单元测试类ESServiceTest.java,如下,功能是调用业务类ESService执行创建、删除、查找等索引操作
package com.bolingcavalry.security.service;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ESServiceTest {

    @Autowired
    ESService esService;

    @Test
    void addIndex() throws Exception {
        String indexName = "test_index";

        Assertions.assertFalse(esService.indexExists(indexName));
        esService.addIndex(indexName);
        Assertions.assertTrue(esService.indexExists(indexName));
        esService.delIndex(indexName);
        Assertions.assertFalse(esService.indexExists(indexName));
    }
}
  • 编码完成,开始验证

验证:账号密码鉴权

  • 现在ESService中使用的es服务类是账号密码鉴权的,运行单元测试,看看是否可以成功操作ES,如下图,符合预期
    在这里插入图片描述

验证:ApiKey鉴权

  • 再来试试ApiKey鉴权操作es,修改ESService.java源码,改动如下图红框所示
    在这里插入图片描述

  • 为了检查创建的索引是否符合预期,注释掉单元测试类中删除索引的代码,如下图,如此一来,单元测试执行完成后,新增的索引还保留在es环境中
    在这里插入图片描述

  • 再执行一次单元测试,依旧符合预期
    在这里插入图片描述

  • 用eshead查看,可见索引创建成功
    在这里插入图片描述

  • 至此,SpringBoot操作带有安全检查的elasticsearch8的实战就完成了,在SpringData提供elasticsearch8操作的库之前,基于es官方原生client库的操作是常见的elasticsearch8访问方式,希望本文能给您一些参考

源码下载

名称 链接 备注
项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.c
首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SPI机制是如何规避双亲委派机制的.. 下一篇Prototype Pattern —— Creation..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目