Java 使用SolrJ设置自定义请求头
我在Solr中配置了一个自定义http过滤器,它首先被调用(在org.apache.Solr.servlet.SolrDispatchFilter之前执行),用于处理到达Solr的每个请求。自定义筛选器在所有传入的solr请求中查找特定的请求头,并且仅当其存在时,才会将其发送给solr进行进一步处理 我使用SolrJ进行某些查询。在查询Solr到SolrJ时,有没有办法设置HTTP请求头Java 使用SolrJ设置自定义请求头,java,solr,solrj,Java,Solr,Solrj,我在Solr中配置了一个自定义http过滤器,它首先被调用(在org.apache.Solr.servlet.SolrDispatchFilter之前执行),用于处理到达Solr的每个请求。自定义筛选器在所有传入的solr请求中查找特定的请求头,并且仅当其存在时,才会将其发送给solr进行进一步处理 我使用SolrJ进行某些查询。在查询Solr到SolrJ时,有没有办法设置HTTP请求头 My Solr and SorlJ版本为5.4.0您可以扩展HttpSolrClient创建自己的类MyHt
My Solr and SorlJ版本为5.4.0您可以扩展
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);
}
}
公共类MyHttpSolrClient扩展了HttpSolrClient{
公共MyHttpSolrClient(字符串baseURL){
super(baseURL);
}
公共MyHttpSolrClient(字符串baseURL,HttpClient客户端){
super(baseURL,客户端);
}
公共MyHttpSolrClient(字符串baseURL、HttpClient客户端、ResponseParser解析器){
super(baseURL、客户端、解析器);
}
受保护的NamedList executeMethod(HttpRequestBase方法,最终响应资源处理器)引发SolrServerException{
//**在此处添加自定义标题**
方法addHeader(“名称”、“值”);
返回super.executeMethod(方法、处理器);
}
}
您可以扩展HttpSolrClient
创建自己的类MyHttpSolrClient
,并自定义添加自定义请求头的执行方法的行为
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);
}
}
公共类MyHttpSolrClient扩展了HttpSolrClient{
公共MyHttpSolrClient(字符串baseURL){
super(baseURL);
}
公共MyHttpSolrClient(字符串baseURL,HttpClient客户端){
super(baseURL,客户端);
}
公共MyHttpSolrClient(字符串baseURL、HttpClient客户端、ResponseParser解析器){
super(baseURL、客户端、解析器);
}
受保护的NamedList executeMethod(HttpRequestBase方法,最终响应资源处理器)引发SolrServerException{
//**在此处添加自定义标题**
方法addHeader(“名称”、“值”);
返回super.executeMethod(方法、处理器);
}
}
对此解决方案有何想法
// 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
()
这依赖于内部HttpClient实现,并受
改变
警告:此API是实验性的,可能会在
下一版本中的不兼容方式
我还对我创建的任何后续客户端实例的任何延迟影响提出了问题/担忧。这些实例也会配置相同的拦截器吗?我能做些什么来确保他们不会这样做吗?关于这个解决方案的想法
// 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
()
这依赖于内部HttpClient实现,并受
改变
警告:此API是实验性的,可能会在
下一版本中的不兼容方式
我还对我创建的任何后续客户端实例的任何延迟影响提出了问题/担忧。这些实例也会配置相同的拦截器吗?我能做些什么来确保他们不会