经过多天的搜索和许多不成功的尝试,我希望社区知道一种方法来完成我的任务:
我想使用 grails 作为我的 solr 后端的一种代理。通过这个,我想确保只有授权的请求由 solr 处理。Grails 检查提供的集合和请求的操作,并使用预定义的基于用户的规则验证请求。因此,我将我的 grails URL 映射扩展到
"/documents/$collection/$query" {
controller = "documents"
action = action = [GET: "proxy_get", POST: "proxy_post"]
}
即使客户端使用 solrJ,proxy_get 方法也能正常工作。我所要做的就是将 URL 请求转发给 solr 并用 solr 响应进行回复。
但是,在 proxy_post 方法中,我需要获取请求的原始正文数据以将其转发给 solr。SolrJ 正在为此使用 javabin,但到目前为止我无法获得原始二进制请求。最有希望的方法是:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(solrUrl);
InputStream requestStream = request.getInputStream();
ContentType contentType = ContentType.create(request.getContentType());
httpPost.setEntity(new ByteArrayEntity(IOUtils.toByteArray(requestStream), contentType));
httpPost.setHeader("Content-Type", request.getContentType())
HttpResponse solrResponse = httpClient.execute(httpPost);
但是,在 javabin 的情况下,传输的内容是空的(例如,当我使用 solrJ 添加文档时)。
所以我的问题是,是否有可能获取原始二进制帖子内容,以便我可以将请求转发给 solr。
马蒂亚斯