我在Solr中配置了一个自定义http过滤器,它首先为每个命中solr的请求调用(在org.apache.solr.servlet.SolrDispatchFilter之前执行)。自定义过滤器在所有传入的solr请求中查找特定的请求标头,并且只有在其存在时,它才会将其发送以供solr进一步处理。
我使用SolrJ进行某些查询。有什么办法可以在通过SolrJ查询Solr时设置HTTP请求头吗?
我的Solr和SorlJ版本是5.4.0
答案 0 :(得分:2)
您可以扩展HttpSolrClient
创建自己的班级MyHttpSolrClient
,并自定义executeMethod
添加自定义请求标头的行为。
public class MyHttpSolrClient extends HttpSolrClient {
public MyHttpSolrClient(String baseURL) {
super(baseURL);
}
public MyHttpSolrClient(String baseURL, HttpClient client) {
super(baseURL, client);
}
public MyHttpSolrClient(String baseURL, HttpClient client, ResponseParser parser) {
super(baseURL, client, parser);
}
protected NamedList<Object> executeMethod(HttpRequestBase method, final ResponseParser processor) throws SolrServerException {
// **Here you add your custom header**
method.addHeader("Name", "Value");
return super.executeMethod(method, processor);
}
}
答案 1 :(得分:0)
对此解决方案的想法?
// somewhere in my client initialization code
HttpRequestInterceptor interceptor = (HttpRequest request, HttpContext context) -> {
request.addHeader("myheadername", "myheadervalue");
};
HttpClientUtil.addRequestInterceptor(interceptor);
HttpSolrClient solrClient = new HttpSolrClient.Builder(serverUrl).build();
我对HttpClientUtil
(https://solr.apache.org/docs/8_8_1/solr-solrj/org/apache/solr/client/solrj/impl/HttpClientUtil.html) 中的这条评论提出的问题/担忧
这依赖于内部的 HttpClient 实现并且是主题 改变。
<块引用>警告:此 API 是实验性的,可能会在 下一个版本中不兼容的方式。
对于我创建的任何后续客户端实例的任何挥之不去的影响,我也有一个问题/担忧。这些实例是否也配置了相同的拦截器?我能做些什么来确保他们不会吗?