乐趣区

关于后端:solr-811入门教程5账号密码

https://solr.apache.org/guide…

后面减少了拜访白名单,这里再减少账号密码,这样辨别一下同一个 ip 下的不同用户,进一步晋升安全性。

1、jetty 形式验证

咱们这里应用的 jetty 模式启动。

1.1 创立 user.properties 文件

solr-8.11.2/server/etc 目录下创立 user.properties,名字能够本人定义,与solr-jetty-context.xml 中保持一致。

#
# 这个文件定义用户名, 明码和角色  
#
# 格局如下:<username>: <password>[,<rolename> ...]
#用户名:admin 明码:[email protected]#qwe 角色:admin 自定义与 web.xml 中 role-name 保持一致,能够有多个角色
admin:[email protected]#qwe,admin

1.2 批改 solr-jetty-context.xml 文件

批改 solr-8.11.2/server/contexts/solr-jetty-context.xml 文件,减少账号密码的配置。

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  ……
      <!-- 配置账号密码 -->
    <Get name="securityHandler">
        <Set name="loginService">
            <New class="org.eclipse.jetty.security.HashLoginService">
                <!-- name 与 web.xml 中 realm-name 统一即可 -->
                <Set name="name">solr-login-name</Set>
                <!-- user.properties 与下面新建的文件放弃同名即可 -->
                <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/user.properties</Set>
            </New>
        </Set>
    </Get>

</Configure>

1.3 批改 web.xml 文件

批改 solr-8.11.2/server/solr-webapp/webapp/WEB-INF/web.xml减少角色配置

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Solr</web-resource-name>
        <url-pattern>/</url-pattern><!-- 验证的页面 -->
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name><!-- 角色名称,如有多个角色能够写多个 role-name 标签 -->
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method><!-- 验证类型,BASIC 验证 -->
    <realm-name>solr-login-name</realm-name><!-- 平安域 -->
</login-config>

2、应用 security.json 文件创建

参考:咱们这里应用 Basic 验证的形式。

https://solr.apache.org/guide…

https://solr.apache.org/guide…

咱们这里演示的是单机模式。

在 solr-8.11.2/server/solr 目录下创立一个 security.json 文件,外面的内容如下

{
    "authentication":{
        "#blockUnknown": true,
        "class":"solr.BasicAuthPlugin",
        "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}
    },
    "authorization":{
        "class":"solr.RuleBasedAuthorizationPlugin",
        "permissions":[
            {
                "name":"security-edit",
                "role":"admin"
            }
        ], 
        "user-role":{"solr":"admin"}
    }
}
  1. authenticationauthorization 配置是启用根本身份验证和基于规定的受权插件。
  2. 参数 "blockUnknown": true:示意不容许未经身份验证的申请通过。
  3. 参数"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=":定义了一个名为solr 的用户,其中有明码 SolrRocks,这个明码重启后肯定要批改。
  4. 参数"role":"admin":定义了一个admin 角色已定义,并且具备编辑平安设置的权限。
  5. 参数"solr":"admin"solr 用户已被定义为 admin 角色。

重启,点击 security 按钮,这时就能够看到咱们配置的信息了。前面能够在这个页面增加其余用户。

肯定要批改初始密码,假如 solr 用户的明码批改为 admin31511cs:能够点击页面批改或者应用命令批改

curl --user solr:SolrRocks http://localhost:9983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"set-user": {"solr":"admin31511cs"}}'

API 官网文档

# 新增或批改明码(如果用户名存在,就批改明码,否则就创立用户)
#solr:SolrRocks 为用户名: 明码,"set-user": {"solr":"admin31511cs"}外面能够跟多个用户,用户名: 明码
curl --user solr:SolrRocks http://localhost:9983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"set-user": {"solr":"admin31511cs"}}'

#删除用户
curl --user solr:SolrRocks http://localhost:9983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"delete-user": ["tom"]}'

可能遇到的谬误

1、Error loading class ‘solr.DataImportHandler’

如果配置实现后 reload 配置的 core 后报错在 Solr Admin UI 上报如下谬误:

Error loading class 'solr.DataImportHandler'
解决这个问题:org.apache.solr.handler.dataimport.DataImportHandler 这个类在这个 jar 包中,在 dist/solr-dataimporthandler-8.11.2.jar
    把这个 jar 包复制到 server/solr-webapp/webapp/WEB-INF/lib 目录下;再重启就能够了。

2、LocalDateTime cannot be cast to class java.util.Date

Error adding field ‘createTime’=’2022-09-26T10:23:37’ msg=class java.time.LocalDateTime cannot be cast to class java.util.Date (java.time.LocalDateTime and java.util.Date are in module java.base of loader ‘bootstrap’

这是用高版本的驱动,默认将 datetime 类型转为了 LocalDateTime 类型,解决办法两种 1 是升高 mysql 驱动版本,2 是批改数据库类型为 timestamp

转义字符

+ - && || ! () {} [] ^ " ~ * ? : / 这些字符在 solr 中具备非凡的含意,如果要应用这么字符自身含意,须要利用 \(反斜线) 进行本义,比方: \(1\+1\)本义后是 (1+1)

官网阐明

搜寻连接符

默认搜寻连接符为OR, 即两个搜寻条件间接间接加空格时。

如果应用旧版本的设置会报错

<solrQueryParser defaultOperator="AND"/>

org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core xxx: Can’t load schema /home/ubuntu/software/solr-8.11.2/server/solr/xxx/conf/managed-schema: Setting default operator in schema (solrQueryParser/@defaultOperator) not supported

这是因为新版本曾经不反对这个设置办法了,应用上面办法解决或者间接在搜寻语句中显示申明连接符

SolrQuery solrQuery = new SolrQuery();
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("q.op", "AND"); // 应用 AND 连贯
solrQuery.add(params);

……
    
// 默认是 or,显示申明
if (ObjectUtil.isNotEmpty(queryParams.getKeyword())) { // 应用 ik 分词,双引号示意搜寻时不进行分词
    queryStr.append("AND content:").append("\"").append(queryParams.getKeyword()).append("\"");
}
if (ObjectUtil.isNotEmpty(queryParams.getAuthor())) {queryStr.append("AND author:").append(queryParams.getAuthor());
}
if (ObjectUtil.isNotEmpty(queryParams.getTitle())) {queryStr.append("AND title:").append(queryParams.getTitle());
}

参考文档

  1. 官网文档
  2. 终于有人把 Elasticsearch 原理讲透了!
退出移动版