使用SolrJ设置自定义请求标头

时间:2017-05-04 06:00:50

标签: java solr solrj

我在Solr中配置了一个自定义http过滤器,它首先为每个命中solr的请求调用(在org.apache.solr.servlet.SolrDispatchFilter之前执行)。自定义过滤器在所有传入的solr请求中查找特定的请求标头,并且只有在其存在时,它才会将其发送以供solr进一步处理。

我使用SolrJ进行某些查询。有什么办法可以在通过SolrJ查询Solr时设置HTTP请求头吗?

我的Solr和SorlJ版本是5.4.0

2 个答案:

答案 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 是实验性的,可能会在 下一个版本中不兼容的方式。

对于我创建的任何后续客户端实例的任何挥之不去的影响,我也有一个问题/担忧。这些实例是否也配置了相同的拦截器?我能做些什么来确保他们不会吗?