使用授权将带有太阳黑子的rails应用程序连接到tomcat/solr服务器

Les*_*ial 4 tomcat solr ruby-on-rails production-environment sunspot-rails

好的,所以我有一个单独的服务器与solr,这与应用程序完全正常.使用通常的sunspot.yml我们有类似的东西:

production:
  solr:
    hostname: domain
    port: 8080
    log_level: WARNING
    path: path/to/data
Run Code Online (Sandbox Code Playgroud)

问题是我想授权我的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>
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*zny 7

我不确定Sunspot配置是否通过YAML支持Basic Auth用户名和密码.这些选项都连接在一起以分配Sunspot.config.solr.url给RSolr并随后提供给RSolr.这是一个简单的疏忽 - 欢迎来自https://github.com/outoftime/sunspot的拉取请求来解决这个问题.

您可以Sunspot.config.solr.url直接在初始化程序中分配,或通过环境变量指定URL.Sunspot支持环境变量SOLR_URLWEBSOLR_URL环境变量,这样做应保留Basic Auth用户名和密码.

要在开发环境中测试它:

rake sunspot:reindex SOLR_URL=http://admin:foobar@localhost:8983/solr
rails server SOLR_URL=http://admin:foobar@localhost:8983/solr
Run Code Online (Sandbox Code Playgroud)