从服务器运行App时ElasticSearch在PUT上抛出403,但在本地计算机上运行时可以工作

时间:2018-11-14 15:24:09

标签: java elasticsearch

我正在使用RestTemplate将数据发布到ElasticSearch:

 String elasticUrl = "localhost:9200/" + route + "/_bulk";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<String> request = new HttpEntity<>(json,headers);
    LOG.info("Sendin data to elastic url: " + elasticUrl + "\n" + request.getBody());

    ResponseEntity<String> response;
    try{
         response = restTemplate.exchange(elasticUrl,HttpMethod.PUT,request,String.class);
         LOG.info("Response from elastic:\n" + response.getBody());
    }catch(Exception e ) {
        LOG.debug(e.getMessage());
    }

elastic在远程服务器上运行(我有ssh隧道,所以我正在使用localhost)。这可以正常工作,但是当我在运行弹性的服务器上部署应用程序时,会抛出

  

403-禁止

但是,使用该服务器上的curl效果很好。我还没有找到API在本地计算机上与部署时的行为应有所不同的任何原因。发生这种现象的原因可能是什么?

如果某些东西在弹性配置中被弄乱了,那么来自服务器的卷曲也不会起作用。

感谢帮助。

1 个答案:

答案 0 :(得分:0)

您忘记在URL(http://)中指定协议。

  String elasticUrl = "http://localhost:9200/" + route + "/_bulk";

如果这样做没有帮助,请通过将org.apache.http.wire设置为DEBUG来启用线路日志记录,并查看将哪些报头发送到服务器以及确切的响应是什么。