【问题标题】:Solr AuthenticationSolr 身份验证
【发布时间】:2014-06-19 15:29:07
【问题描述】:

我的 Solr 4.3 实例在 tomcat 服务器上运行,Nutch 抓取我的本地文件系统,Solr 存储索引。

当用户搜索时,我需要 Solr 根据用户类型过滤掉某些文档。

假设我有一个这样的目录结构:

dir1
  |------dir_userA----files
  |------dir_userB----files
  |------Public-------files

所以我只希望搜索返回来自特定用户有权访问的目录的结果。

这可能吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    Solr 没有文档级别的安全性,因此您必须检索和索引每个文档的访问控制列表。然后,您需要对每个搜索应用过滤查询并传入用户的安全组和/或用户名。

    假设您的文档是这样索引的,其中多值字段“访问”的值在索引时由文件的实际权限确定:

    <doc>
      <field name="id">42</field>
      <field name="name">Products.xlsx</field>
      <field name="title">Product list</field>
      <field name="content">...</field>
      <field name="access">COMPANY\Marketing</field>
      <field name="access">COMPANY\CustomerService</field>
    </doc>
    

    然后你可以在 solrconfig.xml 中使用默认过滤器查询参数来装饰查询请求处理程序:

    <requestHandler name="/select" class="solr.SearchHandler">
        <defaults>
            <str name="fq">access:"COMPANY\Everyone"</str>
        </default>
    </requestHandler>
    

    现在默认搜索不会返回 Products.xlsx 文档,因为默认的“用户”被模拟(即“COMPANT\Everyone”)不会出现在“访问”字段中。但是一旦你传入一个实际的用户组来覆盖默认的过滤器查询,Solr 就会返回文档:

    /solr/collection1/select?q=content:"product x"&fq=access:"COMPANY\Marketing"
    

    当然,当权限发生变化时,必须尽快更新索引以反映这一点。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 2023-03-19
      • 2015-06-27
      • 2013-03-03
      • 1970-01-01
      • 2015-02-02
      • 2018-02-24
      • 2015-04-29
      • 2010-10-05
      相关资源
      最近更新 更多