4

好的,所以我有一个带有 solr 的单独服务器,它与应用程序连接得很好。使用通常的 sunspot.yml 我们有类似的东西:

production:
  solr:
    hostname: domain
    port: 8080
    log_level: WARNING
    path: path/to/data

问题是我想授权我的 tomcat 应用程序。似乎只要你知道域和端口,你就可以去访问 solr/admin。所以在我的 tomcat web.xml 中我添加了:

<security-constraint>
    <web-resource-collection>
      <web-resource-name> 
        Solr authenticated application
      </web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>role</role-name>
    </auth-constraint>
  </security-constraint>
   <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>REALM</realm-name>
  </login-config>
  <security-role>
    <description>ROLE NAME</description>
    <role-name>role</role-name>
  </security-role>

这将要求访问 solr/admin 的任何人在被授予访问权限之前提供用户名和密码。问题是我如何告诉我的 Rails 应用程序?执行此操作后,当我的 rails 应用程序尝试访问 solr 服务器时,我会收到预期的“未经授权”响应。我知道它可能会进入 sunspot.yml 文件,但我必须添加什么?

4

2 回答 2

7

我不确定 Sunspot 配置是否支持通过 YAML 的基本身份验证用户名和密码。这些选项都连接在一起以分配Sunspot.config.solr.url给RSolr,然后再分配给RSolr。这是一个简单的疏忽——欢迎在https://github.com/outoftime/sunspot提出拉取请求来解决这个问题。

Sunspot.config.solr.url直接在初始值设定项中赋值,或者通过环境变量指定 URL,你会获得更好的运气。Sunspot 支持SOLR_URLWEBSOLR_URL环境变量,这样做应该保留一个基本身份验证用户名和密码。

要在您的开发环境中进行测试:

rake sunspot:reindex SOLR_URL=http://admin:foobar@localhost:8983/solr
rails server SOLR_URL=http://admin:foobar@localhost:8983/solr
于 2011-04-08T17:11:59.267 回答
1

https://github.com/justinko/sunspot-rails-http-basic-auth

宝石安装这个。它对 sunspot_rails 的 HTTP 基本身份验证支持。然后,您可以将用户名和密码放入生成的 sunspot.yml 中。

于 2011-07-21T06:18:03.083 回答