【搜索系列】Solr 身份认证与授权更新异常解决方案
之前介绍 solr 的教程中,solr 没有开启权限校验,所有的操作都是无需鉴权;当时提到,如果 solr 开启了权限校验,改一下 solr 的 host,带上用户名/密码即可,然而真实情况却并不太一样,查询 ok,涉及到修改的操作,则会抛异常
本文将带你了解一下,这到底是个什么鬼畜现象
I. Solr 配置用户登录
1. 安装
之前的 solr 系列教程中,通过 docker 安装的 solr,下面的步骤也是直接针对 docker 中的 solr 进行配置,基本步骤一样
具体可以参考:【搜索系列】Solr 环境搭建与简单测试
不想看的同学,直接用下面的命令即可:
docker pull solr
docker run --name my-solr -d -p 8983:8983 -t solr
2. 配置
下面一步一步教你如何设置用户密码,也可以参考博文: 手把手教你 对 solr8 配置用户登录验证[2]
进入实例,注意使用root
用户,否则某些操作可能没有权限
docker exec -u root -it my-solr /bin/bash
创建鉴权文件
vim server/etc/verify.properties
内容如下,格式为 用户名:密码,权限
, 一行一个账号
root:123,admin
配置鉴权文件
vim server/contexts/solr-jetty-context.xml
添加下面的内容放在Configure
标签内
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">verify—name</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/verify.properties</Set>
</New>
</Set>
</Get>
修改 web.xml
vim server/solr-webapp/webapp/WEB-INF/web.xml
在security-constraint
标签下面,新增
<login-config>
<auth-method>BASIC</auth-method>
<!-- 请注意,这个name 和上面的Set标签中的name保持一致 -->
<realm-name>verify-name</realm-name>
</login-config>
重启 solr,配置生效
docker restart my-solr
II. 场景复现
接下来介绍一下我们的环境
-
springboot: 2.2.1.RELEASE
-
solr: 8.0
1. 项目环境
搭建一个简单的 springboot 项目,xml 依赖如下