Files
doc-exports/docs/css/umn/css_01_0389.html
zhengxiu 2125539080 css umn 25.1.0 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: zhengxiu <zhengxiu@huawei.com>
Co-committed-by: zhengxiu <zhengxiu@huawei.com>
2025-07-04 09:10:17 +00:00

586 lines
70 KiB
HTML

<a name="css_01_0389"></a><a name="css_01_0389"></a>
<h1 class="topictitle1">Accessing an Elasticsearch Cluster Using Spring Boot</h1>
<div id="body8662426"><p id="css_01_0389__en-us_topic_0000001961178861_p17703723205614">You can access a CSS cluster using Spring Boot. Spring Boot can connect to a cluster in any of the following ways:</p>
<ul id="css_01_0389__en-us_topic_0000001961178861_ul18513748121316"><li id="css_01_0389__en-us_topic_0000001961178861_li19513134810130"><a href="#css_01_0389__en-us_topic_0000001961178861_section197550282614">Accessing an HTTP Cluster Through Spring Boot</a>: applicable to clusters in non-security mode and clusters in security mode+HTTP</li><li id="css_01_0389__en-us_topic_0000001961178861_li582117495264"><a href="#css_01_0389__en-us_topic_0000001961178861_section1523020817518">Using Spring Boot to Access an HTTPS Cluster (Without Using Any Security Certificate)</a>: suitable for clusters in security mode+HTTPS</li><li id="css_01_0389__en-us_topic_0000001961178861_li0513124814132"><a href="#css_01_0389__en-us_topic_0000001961178861_section1368184211106">Using Spring Boot to Access an HTTPS Cluster (Using a Security Certificate)</a>: suitable for clusters in security mode+HTTPS</li></ul>
<div class="note" id="css_01_0389__en-us_topic_0000001961178861_note88218318203"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="css_01_0389__en-us_topic_0000001961178861_p14821630208">For details about how to use Spring Boot, see the official document: <a href="https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/" target="_blank" rel="noopener noreferrer">https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/</a></p>
</div></div>
<div class="section" id="css_01_0389__en-us_topic_0000001961178861_section15374261139"><h4 class="sectiontitle">Precautions</h4><ul id="css_01_0389__en-us_topic_0000001961178861_ul4325133835512"><li id="css_01_0389__en-us_topic_0000001961178861_li432603885511">You are advised to use the Elasticsearch Rest High Level Client version that matches the Elasticsearch version. For example, use Rest High Level Client 7.10.2 to access an Elasticsearch 7.10.2 cluster.</li><li id="css_01_0389__en-us_topic_0000001961178861_li984413409559">This section uses Spring Boot 2.5.5 as an example to describe how to connect Spring Boot to a cluster. The corresponding Spring Data Elasticsearch version is 4.2.<em id="css_01_0389__en-us_topic_0000001961178861_i11306123919383">x</em>.</li></ul>
</div>
<div class="section" id="css_01_0389__en-us_topic_0000001961178861_section132734369419"><h4 class="sectiontitle">Prerequisites</h4><ul id="css_01_0389__en-us_topic_0000001961178861_ul115524012184"><li id="css_01_0389__en-us_topic_0000001961178861_li181191829144220">The CSS cluster is available.</li><li id="css_01_0389__en-us_topic_0000001961178861_li578832518434">Ensure that the server running Java can communicate with the CSS cluster.</li><li id="css_01_0389__li578832518434">Depending on the network configuration method used, obtain the cluster access address. For details, see <a href="css_01_0381.html#css_01_0381__section855085010198">Network Configuration</a>.</li><li id="css_01_0389__en-us_topic_0000001961178861_li551945111016">Install JDK 1.8 on the server. You can download JDK 1.8 from: <a href="https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" target="_blank" rel="noopener noreferrer">https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html</a></li><li id="css_01_0389__en-us_topic_0000001961178861_li222181418235">Create a Spring Boot project.</li><li id="css_01_0389__en-us_topic_0000001961178861_li7446164115186">Declare Java dependencies.<p id="css_01_0389__en-us_topic_0000001961178861_p944674119185"><a name="css_01_0389__en-us_topic_0000001961178861_li7446164115186"></a><a name="en-us_topic_0000001961178861_li7446164115186"></a><em id="css_01_0389__en-us_topic_0000001961178861_i1881973620595">7.10.2</em> indicates the version of the Elasticsearch Java client.</p>
<ul id="css_01_0389__en-us_topic_0000001961178861_ul1626619015197"><li id="css_01_0389__en-us_topic_0000001961178861_li793695731817">Maven mode:<pre class="screen" id="css_01_0389__en-us_topic_0000001961178861_screen344644110182">&lt;parent&gt;
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
&lt;version&gt;2.5.5&lt;/version&gt;
&lt;/parent&gt;
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-data-elasticsearch&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.elasticsearch.client&lt;/groupId&gt;
&lt;artifactId&gt;elasticsearch-rest-high-level-client&lt;/artifactId&gt;
&lt;version&gt;<i><span class="varname" id="css_01_0389__en-us_topic_0000001961178861_varname155302046105913">7.10.2</span></i>&lt;/version&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;</pre>
</li></ul>
</li></ul>
</div>
<div class="section" id="css_01_0389__en-us_topic_0000001961178861_section197550282614"><a name="css_01_0389__en-us_topic_0000001961178861_section197550282614"></a><a name="en-us_topic_0000001961178861_section197550282614"></a><h4 class="sectiontitle">Accessing an HTTP Cluster Through Spring Boot</h4><p id="css_01_0389__en-us_topic_0000001961178861_p103482430218">This scenario applies to clusters in non-security mode or clusters in security mode+HTTP.</p>
<p id="css_01_0389__en-us_topic_0000001961178861_p7387545142616">Configuration file:</p>
<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen11598123210289"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">elasticsearch</span><span class="p">.</span><span class="na">url</span><span class="o">=</span><span class="n">host1</span><span class="p">:</span><span class="mi">9200</span><span class="p">,</span><span class="n">host2</span><span class="p">:</span><span class="mi">9200</span>
<span class="c1">// You do not need to configure the following two lines for a non-security cluster.</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">username</span><span class="o">=</span><span class="n">username</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">password</span><span class="o">=</span><span class="n">password</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0389__en-us_topic_0000001961178861_table139354125176" frame="border" border="1" rules="all"><caption><b>Table 1 </b>Parameter description</caption><thead align="left"><tr id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_row15833437142513"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.6.5.2.3.1.1"><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p198331837112510">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.6.5.2.3.1.2"><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1783383762518">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_row383320375257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p15833153752514">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p18833143722511">IP address for accessing the Elasticsearch cluster.</p>
</td>
</tr>
<tr id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_row148340375259"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1834153762511">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1183412376255">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_row208346377257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p12834183715254">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0389__en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1083473782518">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="css_01_0389__en-us_topic_0000001961178861_p154912187318">Code:</p>
<div class="note" id="css_01_0389__en-us_topic_0000001961178861_note4308415102815"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="css_01_0389__en-us_topic_0000001961178861_ul1540814317282"><li id="css_01_0389__en-us_topic_0000001961178861_li11408731132820"><strong id="css_01_0389__en-us_topic_0000001961178861_b1621392614252">com.xxx</strong> indicates the project directory, for example, <strong id="css_01_0389__en-us_topic_0000001961178861_b464202814252">com.company.project</strong>.</li><li id="css_01_0389__en-us_topic_0000001961178861_li540843122814"><strong id="css_01_0389__en-us_topic_0000001961178861_b1437293592517">com.xxx.repository</strong> is the repository directory, which is defined by <strong id="css_01_0389__en-us_topic_0000001961178861_b687184210257">extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository</strong>.</li></ul>
</div></div>
<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen17911132817318"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">com.xxx.configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.beans.factory.annotation.Value</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Bean</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.ComponentScan</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.ClientConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.RestClients</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories</span><span class="p">;</span>
<span class="nd">@Configuration</span>
<span class="nd">@EnableElasticsearchRepositories</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx.repository&quot;</span><span class="p">)</span>
<span class="nd">@ComponentScan</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx&quot;</span><span class="p">)</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Config</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">AbstractElasticsearchConfiguration</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.url}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUrl</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// You do not need to set the following two parameters for a non-security cluster.</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.username}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUsername</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.password}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="nd">@Bean</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">elasticsearchClient</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="w"> </span><span class="n">clientConfiguration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="p">.</span><span class="na">builder</span><span class="p">()</span>
<span class="w"> </span><span class="p">.</span><span class="na">connectedTo</span><span class="p">(</span><span class="n">StringHostParse</span><span class="p">(</span><span class="n">elasticsearchUrl</span><span class="p">))</span>
<span class="w"> </span><span class="c1">// For a non-security cluster, there is no need to configure withBasicAuth.</span>
<span class="w"> </span><span class="p">.</span><span class="na">withBasicAuth</span><span class="p">(</span><span class="n">elasticsearchUsername</span><span class="p">,</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">RestClients</span><span class="p">.</span><span class="na">create</span><span class="p">(</span><span class="n">clientConfiguration</span><span class="p">).</span><span class="na">rest</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="nf">StringHostParse</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">.</span><span class="na">split</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="css_01_0389__en-us_topic_0000001961178861_section1523020817518"><a name="css_01_0389__en-us_topic_0000001961178861_section1523020817518"></a><a name="en-us_topic_0000001961178861_section1523020817518"></a><h4 class="sectiontitle">Using Spring Boot to Access an HTTPS Cluster (Without Using Any Security Certificate)</h4><p id="css_01_0389__en-us_topic_0000001961178861_p12863121582013">You can connect to a cluster in Security mode + HTTPS without using any security certificate.</p>
<p id="css_01_0389__en-us_topic_0000001961178861_p594391111819">Configuration file:</p>
<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen16943713187"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">elasticsearch</span><span class="p">.</span><span class="na">url</span><span class="o">=</span><span class="n">host1</span><span class="p">:</span><span class="mi">9200</span><span class="p">,</span><span class="n">host2</span><span class="p">:</span><span class="mi">9200</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">username</span><span class="o">=</span><span class="n">username</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">password</span><span class="o">=</span><span class="n">password</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0389__en-us_topic_0000001961178861_table271814200188" frame="border" border="1" rules="all"><caption><b>Table 2 </b>Parameter description</caption><thead align="left"><tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row15833437142513"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.7.5.2.3.1.1"><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p198331837112510">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.7.5.2.3.1.2"><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1783383762518">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row383320375257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p15833153752514">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p18833143722511">IP address for accessing the Elasticsearch cluster.</p>
</td>
</tr>
<tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row148340375259"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1834153762511">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1183412376255">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row208346377257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p12834183715254">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.5.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1083473782518">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="css_01_0389__en-us_topic_0000001961178861_p179433191819">Code:</p>
<div class="note" id="css_01_0389__en-us_topic_0000001961178861_note13356131602911"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="css_01_0389__en-us_topic_0000001961178861_ul187776232294"><li id="css_01_0389__en-us_topic_0000001961178861_li3777172310295"><strong id="css_01_0389__en-us_topic_0000001961178861_b16549162822519">com.xxx</strong> indicates the project directory, for example, <strong id="css_01_0389__en-us_topic_0000001961178861_b115491428112515">com.company.project</strong>.</li><li id="css_01_0389__en-us_topic_0000001961178861_li477710236292"><strong id="css_01_0389__en-us_topic_0000001961178861_b159599438250">com.xxx.repository</strong> is the repository directory, which is defined by <strong id="css_01_0389__en-us_topic_0000001961178861_b16959144332511">extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository</strong>.</li></ul>
</div></div>
<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen19969431201919"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">com.xxx.configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.beans.factory.annotation.Value</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Bean</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.ComponentScan</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.ClientConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.RestClients</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyManagementException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="nd">@Configuration</span>
<span class="nd">@EnableElasticsearchRepositories</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx.repository&quot;</span><span class="p">)</span>
<span class="nd">@ComponentScan</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx&quot;</span><span class="p">)</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Config</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">AbstractElasticsearchConfiguration</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.url}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUrl</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.username}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUsername</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.password}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="nd">@Bean</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">elasticsearchClient</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">KeyManagementException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="w"> </span><span class="n">clientConfiguration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="p">.</span><span class="na">builder</span><span class="p">()</span>
<span class="w"> </span><span class="p">.</span><span class="na">connectedTo</span><span class="p">(</span><span class="n">StringHostParse</span><span class="p">(</span><span class="n">elasticsearchUrl</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">usingSsl</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">())</span>
<span class="w"> </span><span class="p">.</span><span class="na">withBasicAuth</span><span class="p">(</span><span class="n">elasticsearchUsername</span><span class="p">,</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">RestClients</span><span class="p">.</span><span class="na">create</span><span class="p">(</span><span class="n">clientConfiguration</span><span class="p">).</span><span class="na">rest</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="nf">StringHostParse</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">.</span><span class="na">split</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="css_01_0389__en-us_topic_0000001961178861_section1368184211106"><a name="css_01_0389__en-us_topic_0000001961178861_section1368184211106"></a><a name="en-us_topic_0000001961178861_section1368184211106"></a><h4 class="sectiontitle">Using Spring Boot to Access an HTTPS Cluster (Using a Security Certificate)</h4><p id="css_01_0389__en-us_topic_0000001961178861_p15237154812615">You can use a security certificate to connect to a cluster in security mode + HTTPS.</p>
<ol id="css_01_0389__en-us_topic_0000001961178861_ol5745191917819"><li id="css_01_0389__en-us_topic_0000001961178861_li177459191381">Obtain the security certificate <strong id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_b351614474216">CloudSearchService.cer</strong>.<ol type="a" id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_ol950510531194"><li id="css_01_0389__css_01_0386_css_02_0106_li1798555810535">Log in to the CSS management console.</li><li id="css_01_0389__css_01_0386_css_02_0106_li146461036135810">In the navigation pane, choose <strong id="css_01_0389__css_01_0386_css_02_0106_b1361463413337">Clusters</strong>. The cluster list is displayed.</li><li id="css_01_0389__css_01_0386_css_02_0106_li19708195345420">Click the name of a cluster to go to the cluster details page.</li><li id="css_01_0389__css_01_0386_css_02_0106_li426111575415">On the <strong id="css_01_0389__css_01_0386_css_02_0106_b52752041164216">Configuration</strong> page, click <strong id="css_01_0389__css_01_0386_css_02_0106_b117539447428">Download Certificate</strong> next to <strong id="css_01_0389__css_01_0386_css_02_0106_b0503981813">HTTPS Access</strong>.</li></ol>
</li><li id="css_01_0389__en-us_topic_0000001961178861_li1283311442215">Convert the security certificate <strong id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_b69670521924">CloudSearchService.cer</strong>. Upload the downloaded security certificate to the client and use keytool to convert the .cer certificate into a .jks certificate that can be read by Java.<ul id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_ul155491852127"><li id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_li135492527217">In Linux, run the following command to convert the certificate:<pre class="screen" id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_screen4328121445715">keytool -import -alias <i><span class="varname" id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_varname16767137195714">newname</span></i> -keystore ./truststore.jks -file ./CloudSearchService.cer </pre>
</li><li id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_li1193263018316">In Windows, run the following command to convert the certificate:<pre class="screen" id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_screen04987104414">keytool -import -alias <i><span class="varname" id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_varname24988104411">newname</span></i> -keystore .\truststore.jks -file .\CloudSearchService.cer</pre>
</li></ul>
<p id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_p20916163317133">In the preceding command, <em id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_i2126133912318">newname</em> indicates the user-defined certificate name.</p>
<p id="css_01_0389__css_01_0386_en-us_topic_0000001961178813_p16714243162713">After this command is executed, you will be prompted to set the certificate password and confirm the password. Securely store the password. It will be used for accessing the cluster.</p>
</li><li id="css_01_0389__en-us_topic_0000001961178861_li12745319189"><strong id="css_01_0389__en-us_topic_0000001961178861_b922145592019">application.properties</strong> configuration file:<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen0479184718254"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">elasticsearch</span><span class="p">.</span><span class="na">url</span><span class="o">=</span><span class="n">host1</span><span class="p">:</span><span class="mi">9200</span><span class="p">,</span><span class="n">host2</span><span class="p">:</span><span class="mi">9200</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">username</span><span class="o">=</span><span class="n">username</span>
<span class="n">elasticsearch</span><span class="p">.</span><span class="na">password</span><span class="o">=</span><span class="n">password</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0389__en-us_topic_0000001961178861_table104944819262" frame="border" border="1" rules="all"><caption><b>Table 3 </b>Parameter description</caption><thead align="left"><tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row15833437142513_1"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.8.3.3.3.2.3.1.1"><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p198331837112510_1">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.8.3.3.3.2.3.1.2"><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1783383762518_1">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row383320375257_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p15833153752514_1">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p18833143722511_1">IP address for accessing the Elasticsearch cluster.</p>
</td>
</tr>
<tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row148340375259_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1834153762511_1">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1183412376255_1">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_row208346377257_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.1 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p12834183715254_1">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.3.3.3.2.3.1.2 "><p id="css_01_0389__css_01_0389_en-us_topic_0000001961178861_en-us_topic_0000001238181826_p1083473782518_1">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
</li><li id="css_01_0389__en-us_topic_0000001961178861_li54804473254">Code:<div class="note" id="css_01_0389__en-us_topic_0000001961178861_note72721249102914"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="css_01_0389__en-us_topic_0000001961178861_ul1762115329311"><li id="css_01_0389__en-us_topic_0000001961178861_li462133273117"><strong id="css_01_0389__en-us_topic_0000001961178861_b13550328102519">com.xxx</strong> indicates the project directory, for example, <strong id="css_01_0389__en-us_topic_0000001961178861_b19550162852514">com.company.project</strong>.</li><li id="css_01_0389__en-us_topic_0000001961178861_li162103213317"><strong id="css_01_0389__en-us_topic_0000001961178861_b09612437252">com.xxx.repository</strong> is the repository directory, which is defined by <strong id="css_01_0389__en-us_topic_0000001961178861_b15961943162515">extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository</strong>.</li></ul>
</div></div>
<div class="codecoloring" codetype="Java" id="css_01_0389__en-us_topic_0000001961178861_screen1210053114263"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span>
<span class="normal">95</span>
<span class="normal">96</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">com.xxx.configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.beans.factory.annotation.Value</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Bean</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.ComponentScan</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.context.annotation.Configuration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.ClientConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.client.RestClients</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.File</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.InputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyStore</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManagerFactory</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="nd">@Configuration</span>
<span class="nd">@EnableElasticsearchRepositories</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx.repository&quot;</span><span class="p">)</span>
<span class="nd">@ComponentScan</span><span class="p">(</span><span class="n">basePackages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;com.xxx&quot;</span><span class="p">)</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Config</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">AbstractElasticsearchConfiguration</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.url}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUrl</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.username}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchUsername</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Value</span><span class="p">(</span><span class="s">&quot;${elasticsearch.password}&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="nd">@Bean</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">elasticsearchClient</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="k">new</span><span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">cerFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">cerPassword</span><span class="p">)};</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="w"> </span><span class="n">clientConfiguration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ClientConfiguration</span><span class="p">.</span><span class="na">builder</span><span class="p">()</span>
<span class="w"> </span><span class="p">.</span><span class="na">connectedTo</span><span class="p">(</span><span class="n">StringHostParse</span><span class="p">(</span><span class="n">elasticsearchUrl</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">usingSsl</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">())</span>
<span class="w"> </span><span class="p">.</span><span class="na">withBasicAuth</span><span class="p">(</span><span class="n">elasticsearchUsername</span><span class="p">,</span><span class="w"> </span><span class="n">elasticsearchPassword</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">RestClients</span><span class="p">.</span><span class="na">create</span><span class="p">(</span><span class="n">clientConfiguration</span><span class="p">).</span><span class="na">rest</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="nf">StringHostParse</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">hostAndPorts</span><span class="p">.</span><span class="na">split</span><span class="p">(</span><span class="s">&quot;,&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyX509TrustManager</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">cerFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">cerPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">File</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">cerFilePath</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="p">.</span><span class="na">isFile</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Wrong Certification Path&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Loading KeyStore &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">&quot;...&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">InputStream</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">);</span>
<span class="w"> </span><span class="n">KeyStore</span><span class="w"> </span><span class="n">ks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyStore</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;JKS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">ks</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="n">cerPassword</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">());</span>
<span class="w"> </span><span class="n">TrustManagerFactory</span><span class="w"> </span><span class="n">tmf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TrustManagerFactory</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SunX509&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">ks</span><span class="p">);</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">getTrustManagers</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">TrustManager</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">tms</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tm</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="n">tm</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Couldn't initialize&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<p id="css_01_0389__en-us_topic_0000001961178861_p837821642615">In the preceding command, <i><span class="varname" id="css_01_0389__en-us_topic_0000001961178861_varname1911332132915">cerFilePath</span></i> and <i><span class="varname" id="css_01_0389__en-us_topic_0000001961178861_varname272012572910">cerPassword</span></i> indicate the path and password of the .jks certificate, respectively.</p>
</li></ol>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="css_01_0385.html">Accessing an Elasticsearch Cluster Using Java</a></div>
</div>
</div>