Tomcat中WAR包部署Solr 6.4.2认证配置:官方方法无效求指导
我之前刚好在Tomcat上WAR包部署的Solr 6.4.2里配置过认证,踩过不少坑,给你分享下亲测有效的步骤:
1. 先确认Solr Home路径
首先得保证你的Solr WAR在Tomcat中部署时已经正确指定了Solr Home——这是关键,因为认证配置文件要放在这里。可以通过以下方式确认:
- 查看Tomcat的
conf/Catalina/localhost/solr.xml(如果是单独部署的话),里面是否有类似这样的配置:<Context docBase="/path/to/your/solr.war" debug="0" crossContext="true"> <Environment name="solr/home" type="java.lang.String" value="/path/to/your/solrhome" override="true"/> </Context> - 或者检查Solr应用的
WEB-INF/web.xml里是否有solr/home的初始化参数。
2. 创建security.json配置文件
在你的Solr Home根目录下新建这个文件,用Basic认证的示例配置(你可以根据需求调整权限):
{ "authentication": { "class": "solr.BasicAuthPlugin", "credentials": { "admin": "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c=" } }, "authorization": { "class": "solr.RuleBasedAuthorizationPlugin", "permissions": [ { "name": "security-edit", "role": "admin" }, { "name": "collection-admin-edit", "role": "admin" }, { "name": "collection-admin-read", "role": "admin" }, { "name": "update", "role": "admin" }, { "name": "read", "role": "admin" } ], "user-role": { "admin": ["admin"] } } }
注意:这里的密码是加密后的字符串,你需要用Solr自带的工具生成自己的密码:
java -cp solr-core-6.4.2.jar org.apache.solr.util.SolrCLI hash-password -p 你的密码
把生成的结果替换掉示例里的admin对应的值。
3. 修改Solr应用的web.xml
找到Tomcat中Solr应用的WEB-INF/web.xml,做两处修改:
3.1 添加BasicAuth过滤器
在文件中添加以下Filter配置,让Solr启用认证拦截:
<filter> <filter-name>SolrBasicAuthFilter</filter-name> <filter-class>org.apache.solr.servlet.BasicAuthFilter</filter-class> </filter> <filter-mapping> <filter-name>SolrBasicAuthFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.2 指定security.json路径
找到SolrDispatchServlet的<servlet>配置块,添加初始化参数:
<init-param> <param-name>solr.security.json</param-name> <param-value>${solr.home}/security.json</param-value> </init-param>
这个参数会告诉Solr去哪里读取认证配置文件。
4. 调整文件权限
确保Tomcat运行用户对Solr Home目录和security.json有读写权限,不然Solr启动时读不到配置文件,认证会失效。
5. 重启Tomcat
做完所有修改后,重启Tomcat服务。再次访问Solr管理页面时,就会弹出用户名密码输入框,用你设置的admin和对应密码登录即可。
踩过的坑提醒
- 不要直接在
security.json里写明文密码,必须用Solr的加密工具生成,否则认证不生效。 - 如果你的Solr有多个Core,不需要在每个Core的配置里重复设置,根目录的
security.json会全局生效。 - 如果启动后还是没有认证弹窗,检查Tomcat的日志,看是否有
security.json加载失败的报错,大概率是路径或权限问题。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

