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

Solr 7集成LDAP认证方案咨询:替代Jetty LDAPLoginModule的方法

Solr 7 LDAP 集成:可行的解决方案与配置指南

我之前帮不少人处理过Solr 7集成LDAP的问题,确实因为自带Jetty是精简版,没法直接用Jetty原生的LDAPLoginModule,不过有几个靠谱的方案可以解决这个问题,下面逐个拆解:

方案一:扩展Jetty的LDAP支持(官方兼容路线)

既然Solr 7用的是Jetty 9.4.x系列,我们可以手动添加Jetty的LDAP相关依赖包,然后通过JAAS配置实现认证:

  1. 添加Jetty LDAP依赖包
    下载对应Jetty 9.4.x版本的这几个jar包(版本要和Solr自带的Jetty版本完全匹配,比如Solr 7.7.3用的是Jetty 9.4.20.v20190813):

    • jetty-ldap-xxx.jar
    • jetty-jaas-xxx.jar
    • jetty-security-xxx.jar
      把它们放到Solr安装目录下的server/lib/ext文件夹里。
  2. 配置JAAS登录规则
    创建一个login.conf文件,内容如下(根据你的LDAP环境修改参数):

    SolrLDAP {
        org.eclipse.jetty.jaas.spi.LdapLoginModule required
        debug="true"
        contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
        hostname="your-ldap-server-ip"
        port="389"
        bindDn="cn=admin,dc=your-domain,dc=com"
        bindPassword="your-admin-password"
        userBaseDn="ou=users,dc=your-domain,dc=com"
        userRdnAttribute="uid"
        userIdAttribute="uid"
        userPasswordAttribute="userPassword"
        userObjectClass="inetOrgPerson"
        roleBaseDn="ou=groups,dc=your-domain,dc=com"
        roleNameAttribute="cn"
        roleMemberAttribute="member"
        roleObjectClass="groupOfNames";
    };
    
  3. 让Solr加载JAAS配置
    修改Solr的启动配置文件:

    • Linux/macOS:编辑bin/solr.in.sh,添加一行:
      SOLR_OPTS="$SOLR_OPTS -Djava.security.auth.login.config=/path/to/your/login.conf"
      
    • Windows:编辑bin/solr.in.cmd,添加一行:
      set SOLR_OPTS=%SOLR_OPTS% -Djava.security.auth.login.config=C:\path\to\your\login.conf
      
  4. 配置Solr安全策略
    在Solr的server/solr目录下创建或修改security.json,启用JAAS认证:

    {
      "authentication": {
        "class": "solr.JaasAuthenticationPlugin",
        "loginConfigName": "SolrLDAP"
      },
      "authorization": {
        "class": "solr.RuleBasedAuthorizationPlugin",
        "permissions": [
          {
            "name": "security-edit",
            "role": "solr-admin"
          },
          {
            "name": "collection-admin",
            "role": "solr-editor"
          }
        ],
        "user-role": {
          "john.doe": ["solr-admin"]
        }
      }
    }
    

方案二:使用社区维护的LDAP认证插件

如果不想折腾Jetty依赖,社区有专门为Solr开发的LDAP认证插件,比如solr-ldap-auth-plugin(注意要选支持Solr 7的版本):

  1. 安装插件
    下载对应Solr 7版本的插件jar包,放到server/lib/ext目录。

  2. 配置security.json
    修改security.json,直接指定LDAP相关参数(示例):

    {
      "authentication": {
        "class": "com.github.mattweber.solr.security.LdapAuthenticationPlugin",
        "url": "ldap://your-ldap-server:389",
        "userDnPattern": "uid={0},ou=users,dc=your-domain,dc=com",
        "bindDn": "cn=admin,dc=your-domain,dc=com",
        "bindPassword": "your-admin-password",
        "groupSearchBase": "ou=groups,dc=your-domain,dc=com",
        "groupSearchFilter": "(member={0})",
        "rolePrefix": "solr-"
      },
      "authorization": {
        "class": "com.github.mattweber.solr.security.LdapAuthorizationPlugin",
        "url": "ldap://your-ldap-server:389",
        "bindDn": "cn=admin,dc=your-domain,dc=com",
        "bindPassword": "your-admin-password",
        "groupSearchBase": "ou=groups,dc=your-domain,dc=com",
        "groupSearchFilter": "(member={0})",
        "rolePrefix": "solr-"
      }
    }
    

方案三:自定义LDAP认证处理器

如果上面的方案都不符合你的需求(比如LDAP环境有特殊逻辑),可以自己写一个简单的认证插件:

  1. 编写认证类
    实现Solr的org.apache.solr.security.AuthenticationPlugin接口,在authenticate方法里调用LDAP服务验证用户凭证(比如用JNDI连接LDAP)。

  2. 打包部署
    把编译好的类打包成jar,放到server/lib/ext目录。

  3. 配置security.json
    在security.json里指定你的自定义类全路径:

    {
      "authentication": {
        "class": "com.yourcompany.solr.security.CustomLdapAuthPlugin",
        "ldapUrl": "ldap://your-ldap-server:389",
        "baseDn": "dc=your-domain,dc=com"
        // 其他自定义参数
      }
    }
    

注意事项

  • 不管用哪个方案,都要先测试LDAP连接是否正常,比如用ldapsearch工具验证用户和组的查询逻辑。
  • 开启Solr的debug日志(修改log4j2.xml),方便排查认证失败的原因。
  • 如果LDAP用的是SSL(636端口),需要导入LDAP服务器的证书到Solr的JVM信任库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:08:14