solr_添加用户名密码

时间:2024-03-16 11:01:19

页面直接访问页面:http://192.168.75.101:8983/solr/

就可以在页面中操作各数据,安全性不好,因此希望给solr添加一个密码。

 

1. 修改web.xml

solr-5.5.3/server/solr-webapp/webapp/WEB-INF/web.xml中添加如下内容

  <security-constraint>

    <web-resource-collection>

      <web-resource-name>Solr Lockdown</web-resource-name>

      <url-pattern>/</url-pattern>

    </web-resource-collection>

    <auth-constraint>

      <role-name>solr_admin</role-name>

      <role-name>admin</role-name>

    </auth-constraint>

  </security-constraint>

 

  <login-config>

    <auth-method>BASIC</auth-method>

    <realm-name>Solr Admin</realm-name>

  </login-config>

 

2. 修改jetty.xml

solr-5.5.3/server/etc/jetty.xml中,</Configure>前添加如下内容

<Call name="addBean">

      <Arg>

        <New class="org.eclipse.jetty.security.HashLoginService">

          <Set name="name">Solr Admin</Set>

          <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>

          <Set name="refreshInterval">0</Set>

        </New>

      </Arg>

    </Call>

 

3. 创建realm.properties

最后在solr-5.5.3/server/etc/目录下vim realm.properties,该文件用来存放用户名密码。

例如用户名:admin,密码:12345

格式:【用户名:密码,角色】

 solr_添加用户名密码

solr_添加用户名密码

 /*******将密码改为密文*******************************************************/

输入命令

java -cp /opt/solr-5.5.3/server/lib/jetty-util-9.2.13.v20150730.jar org.eclipse.jetty.util.security.Password admin 12345把明文密码生成三种格式密文如下:

 solr_添加用户名密码

比如密码用MD5格式就是这样  admin:MD5:827ccb0eea8a706c4c34a16891f84e7b,admin

/***************************************************************************/

 

4. 重启solr

这些都完成后,重启服务,进入Solr主界面

solr_添加用户名密码

发现需要输入用户名和密码了。

输入admin/12345后成功登录。

 

5. 代码使用

使用代码时报错:

 solr_添加用户名密码

需要添加包:commons-codec-1.9.jar

再测试 成功。

需要注意的是:前面的例子中solr没有密码,因此HttpSolrClient 中使用的是第一块代码:

    @Bean

    public HttpSolrClient httpSolrClient() {

        if (Strings.isNullOrEmpty(username)) {

            return new HttpSolrClient(uri);

        }

 

        final URI scopeUri = URI.create(uri);

        final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        credentialsProvider.setCredentials(new AuthScope(scopeUri.getHost(), scopeUri.getPort()), new UsernamePasswordCredentials(username, password));

    solrHttpClientBuilder.setMaxConnTotal(128).setMaxConnPerRoute(32).setDefaultRequestConfig(RequestConfig.copy(RequestConfig.DEFAULT).setRedirectsEnabled(true).build()).setDefaultCredentialsProvider(credentialsProvider).addInterceptorFirst(new PreemptiveAuthInterceptor());

        HttpSolrClient client = new HttpSolrClient(uri, solrHttpClientBuilder.build());

        return client;

    }

因此在使用完后不能close,否则后面就不能再用了。

但是有密码后使用的solrHttpClientBuilder,使用完HttpSolrClient 后可以使用其close方法,后面还能继续使用。