Solr 8.6.1配置基础认证后访问返回401认证错误求助
Solr 8.6.1 基础认证配置后返回401错误修复方案
当前配置存在3个核心问题,按以下步骤排查修复即可:
- JVM参数传递位置错误
Solr Docker镜像的solr-foreground启动脚本不会直接读取拼接在命令后的-D开头参数,写在CMD里的两个认证相关系统属性根本没有被JVM加载,仅服务端加载了security.json的认证拦截规则,所有未携带正确认证头的请求(包括Solr内部初始化请求)都会被直接拦截返回401。
不要把JVM参数拼在启动命令后,通过SOLR_OPTS环境变量传递即可,正确Dockerfile配置参考:ENV SOLR_OPTS="-Dsolr.httpclient.builder.factory=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory \ -Dbasicauth=username:secret" CMD ["solr-foreground"] - security.json配置不符合规范
能弹出用户名密码输入框仅代表认证插件被加载,不代表配置完整:- 必须同时配置
authorization授权规则,给设置的用户绑定对应访问角色,只开认证插件不配授权的话,就算密码正确也会被拦截 credentials字段下不能直接填写明文密码,必须填写Solr生成的加盐SHA256哈希值,直接填明文会导致认证永远失败,哈希值可通过执行solr auth passwd -p 你的明文密码命令生成
最小可用的security.json参考如下,文件需要存放在Solr数据根目录(一般路径为/var/solr/data/security.json),且要保证solr运行用户对文件有读权限:
{ "authentication": { "blockUnknown": true, "class": "solr.BasicAuthPlugin", "credentials": { "username": "替换为你生成的密码哈希值" }, "realm": "Solr Basic Auth" }, "authorization": { "class": "solr.RuleBasedAuthorizationPlugin", "permissions": [ {"name": "all", "role": "admin"} ], "user-role": { "username": "admin" } } } - 必须同时配置
- 配置校验步骤缺失
修改配置重启后先做两步校验:- 查看Solr启动日志,确认配置的两个
-D系统属性已经被JVM正常加载 - 手动执行带认证信息的curl请求验证:
curl -u username:你的明文密码 http://solr服务地址:8983/solr/admin/info/system,如果请求能正常返回系统信息,代表配置生效
- 查看Solr启动日志,确认配置的两个
注意:如果是容器启动后再手动拷贝security.json到数据目录,必须重启Solr服务才能完全加载配置,部分8.x版本存在热加载权限规则不生效的问题。
内容的提问来源于stack exchange,提问作者lee
相关产品推荐
相关产品推荐

