You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Solr 9.2允许无凭证外部用户查询数据库且禁止访问控制台?

解决Solr 9.2匿名查询返回401的方案

1. 修改Solr安全配置文件

Solr的权限控制核心配置文件为server/solr/security.json(Mac默认安装路径,自定义安装则对应Solr Home目录下的该文件),需调整其中的授权规则,允许匿名用户执行查询操作:

  • 打开文件,找到authorization节点下的permissions数组,添加以下规则:

    {
      "name": "allow-anonymous-query-get",
      "role": "*",
      "path": "/select",
      "method": "GET"
    },
    {
      "name": "allow-anonymous-query-post",
      "role": "*",
      "path": "/select",
      "method": "POST"
    }
    

    其中role: "*"表示允许所有角色(含匿名用户)访问/select路径的GET/POST请求。

  • 若文件中无完整的authorization配置,可补充如下完整结构(替换原有加密密码):

    {
      "authentication": {
        "class": "solr.BasicAuthPlugin",
        "credentials": {
          "admin": "你的加密管理员密码"
        },
        "realm": "Solr",
        "forwardCredentials": false
      },
      "authorization": {
        "class": "solr.RuleBasedAuthorizationPlugin",
        "permissions": [
          {
            "name": "security-admin",
            "role": "admin"
          },
          {
            "name": "allow-anonymous-query-get",
            "role": "*",
            "path": "/select",
            "method": "GET"
          },
          {
            "name": "allow-anonymous-query-post",
            "role": "*",
            "path": "/select",
            "method": "POST"
          }
        ],
        "user-role": {
          "admin": ["admin"]
        }
      }
    }
    

2. 配置跨域访问(若外部请求为跨域场景)

如果外部用户的请求来自不同域名,需修改server/solr/webapp/WEB-INF/web.xml中的CORS过滤器配置:

  • 找到cross-origin过滤器块,确保参数设置允许跨域GET请求:
    <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
      <init-param>
        <param-name>allowedOrigins</param-name>
        <param-value>*</param-value>
      </init-param>
      <init-param>
        <param-name>allowedMethods</param-name>
        <param-value>GET,POST,OPTIONS</param-value>
      </init-param>
      <init-param>
        <param-name>allowedHeaders</param-name>
        <param-value>origin, content-type, accept</param-value>
      </init-param>
    </filter>
    
  • 确保过滤器映射覆盖所有路径:
    <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    

3. 重启Solr服务

修改配置后需重启服务使设置生效,终端执行对应命令:

# Homebrew安装的Solr
brew services restart solr

# 手动下载安装的Solr(进入安装目录)
bin/solr restart

4. 测试匿名查询

用Python的requests库验证配置效果:

import requests

# 替换为你的Solr地址和核心名
query_url = "http://你的SolrIP:8983/solr/你的核心名/select?q=*:*"
resp = requests.get(query_url)
print(resp.status_code)
print(resp.json())

若返回200状态码及查询结果,说明配置生效。

注意事项

  • 仅开放查询权限给匿名用户,禁止赋予核心管理、数据修改等高权限,避免安全风险。
  • 若Solr暴露在公网,建议通过防火墙或Jetty的IP白名单配置,限制访问来源IP范围。

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:15:23