我已经在生产服务器中独立安装了solr 7.7。我正在尝试使用码头方式设置身份验证机制。这是我尝试过的:
1.modified“ /opt/solr/server/etc/jetty.xml
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Test Realm</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
<Set name="refreshInterval">0</Set>
</New>
</Arg>
</Call>
在/opt/solr/server/etc/realm.properties中创建的凭证文件
admin: admin123,core
修改了/opt/solr/server/etc/webdefault.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Solr authenticated application</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>core</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Test Realm</realm-name>
</login-config>
此后,如果我重新启动solr服务,则说明solr无法启动。在日志中,我收到以下错误消息:
Suppressed: java.lang.NoSuchFieldException: refreshInterval
Suppressed: java.lang.NoSuchFieldException: TYPE
Suppressed: java.lang.NoSuchMethodException: org.eclipse.jetty.security.HashLoginService.setRefreshInterval(java.lang.String)
答案 0 :(得分:1)
创建安全文件:sudo vim /var/solr/data/security.json
{
"authentication":{
"blockUnknown": true,
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"permissions":[{"name":"security-edit",
"role":"admin"}],
"user-role":{"solr":"admin"}
}}
这将创建一个名为Solr的用户,其密码为SolrRocks
然后重新启动solr服务:sudo service solr restart
验证:http://<ip_address>:8983/solr/admin/authentication
答案 1 :(得分:0)
refreshInterval无效,因为在最近的Jetty版本中不赞成使用setHotReload(布尔值)方法。
Solr 7.7使用Jetty 9.4.14.v20181114
https://lucene.apache.org/solr/8_4_1/changes/Changes.html#v7.7.0.versions_of_major_components
如果您仍想尝试使用此方法而不是BasicAuthPlugin-
,可以在jett.xml中使用以下内容 <Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Login Required</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
<Set name="HotReload">false</Set>
</New>
</Arg>
</Call>
顺便说一句,此过程存在一些问题,因为它使用HashLoginService的here的“基本”身份验证。