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"} }}
authentication
和authorization
配置是启用根本身份验证和基于规定的受权插件。- 参数
"blockUnknown": true
:示意不容许未经身份验证的申请通过。 - 参数
"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="
:定义了一个名为solr
的用户,其中有明码SolrRocks
,这个明码重启后肯定要批改。 - 参数
"role":"admin"
:定义了一个admin
角色已定义,并且具备编辑平安设置的权限。 - 参数
"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());}
参考文档
- 官网文档
- 终于有人把Elasticsearch原理讲透了!