Spring Data Solr连接带认证的SolrCore问题求助
解决Solr添加认证后API无法连接的问题
嘿,这个问题我熟!Solr开启身份认证后,你的API请求因为没携带合法的身份凭证,直接被Solr的安全层拦截了。咱们只需要修改你的SolrConfigs配置类,给Solr客户端添加上认证信息就行,具体步骤如下:
1. 先在配置文件里添加Solr认证参数
不管你用的是application.properties还是application.yml,先把Solr的用户名和密码配置进去:
application.properties示例
solr.host=http://你的Solr地址:8983/solr solr.username=你的Solr认证用户名 solr.password=你的Solr认证密码
application.yml示例
solr: host: http://你的Solr地址:8983/solr username: 你的Solr认证用户名 password: 你的Solr认证密码
2. 修改SolrConfigs配置类,添加认证逻辑
更新你的配置类,创建SolrClient时注入认证信息,让客户端每次请求都自动带上身份凭证:
@Configuration @EnableConfigurationProperties public class SolrConfigs { private static final Logger LOG = LoggerFactory.getLogger(SolrConfigs.class); @Value("${solr.host}") private String solrHost; @Value("${solr.username}") private String solrUsername; @Value("${solr.password}") private String solrPassword; @Bean public SolrClient solrClient() { // 初始化HttpSolrClient构建器 HttpSolrClient.Builder builder = new HttpSolrClient.Builder(solrHost); // 给构建器设置带认证的HttpClient builder.withHttpClient(createAuthHttpClient()); return builder.build(); } // 创建带Basic认证的HttpClient private CloseableHttpClient createAuthHttpClient() { // 存储Solr的用户名密码凭证 CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(solrUsername, solrPassword)); // 构建并返回带认证的HttpClient return HttpClientBuilder.create() .setDefaultCredentialsProvider(credentialsProvider) .build(); } }
关键说明
- 我们通过
BasicCredentialsProvider存储Solr的认证凭证,让HttpClient在每次请求Solr时自动携带Authorization请求头 - 如果你的Solr用的不是Basic认证(比如OAuth2),那需要替换对应的认证拦截逻辑,但绝大多数场景下都是Basic认证
- 你可以先通过curl命令验证认证是否有效:
curl -u 用户名:密码 http://你的Solr地址:8983/solr/你的Core名称/select?q=*:*,能正常返回结果就说明凭证没问题
内容的提问来源于stack exchange,提问作者Kalebere Gaurav
相关产品推荐
相关产品推荐

