solr 8.11入门教程(5)账号密码

https://solr.apache.org/guide/8_11/securing-solr.html

前面增加了访问白名单,这里再增加账号密码,这样区分一下同一个ip下的不同用户,进一步提升安全性。

1、jetty方式验证

我们这里使用的jetty模式启动。

1.1 创建user.properties文件

solr-8.11.2/server/etc目录下创建user.properties,名字可以自己定义,与solr-jetty-context.xml中保持一致。

#
# 这个文件定义用户名,密码和角色  
#
# 格式如下:<username>: <password>[,<rolename> ...]
#用户名:admin 密码:123!@#qwe 角色:admin 自定义与web.xml中role-name保持一致,可以有多个角色
admin:123!@#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/8_11/authentication-and-authorization-plugins.html

https://solr.apache.org/guide/8_11/basic-authentication-plugin.html

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

在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按钮,这时就可以看到我们配置的信息了。后面可以在这个页面添加其他用户。
x8z7tJ.md.png

一定要修改初始密码,假设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原理讲透了!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值