gpt4 book ai didi

java - 使用 AWS SDK 从 AWS Elastic search 获取索引时出现 403 禁止错误

转载 作者:行者123 更新时间:2023-11-30 02:13:03 28 4
gpt4 key购买 nike

我正在使用 AWS SDK 连接到 Elasticsearch 。我正在关注https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-indexing.html

本主题中的其他问题更像是权限问题或写入 Elasticsearch 时的问题。对我来说,写作工作正常,只有阅读才会给我错误

POST 方法工作正常,并且正在添加索引。我正在以相同的方式发出 GET 搜索请求

  public void getIndexedRecords(String index,String type,String id,String documentJSON){

try {
String endpoint = host +"/" +index+"/_search" ;
// Builds the request. We need an AWS service, URI, HTTP method, and request
// body (in this case, JSON).

Request<?> request = new DefaultRequest<Void>(service);
request.setEndpoint(new URI(endpoint));
request.setHttpMethod(HttpMethodName.GET);
request.setContent(new ByteArrayInputStream(documentJSON.getBytes()));

// Retrieves our credentials from the computer. For more information on where
// this class looks for credentials, see
// http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html.

String accessKey = CommonUtils.getCommonProperty("accessKey", "");
String secretKey = CommonUtils.getCommonProperty("secretKey", "");;
AWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey);

// Signs the request using our region, service, and credentials. AWS4Signer
// modifies the original request rather than returning a new request.

AWS4Signer signer = new AWS4Signer();
signer.setRegionName(region);
signer.setServiceName(service);
signer.sign(request, creds);
request.addHeader("Content-Type", "application/json");

// Creates and configures the HTTP client, creates the error and response
// handlers, and finally executes the request.

ClientConfiguration config = new ClientConfiguration();
config.setProtocol(Protocol.HTTPS);
AmazonHttpClient client = new AmazonHttpClient(config);
System.out.println(client);
ExecutionContext context = new ExecutionContext(true);
ESAWSErrorHandler errorHandler = new ESAWSErrorHandler();
ESAWSResponseHandler<Void> responseHandler = new ESAWSResponseHandler<Void>();
client.requestExecutionBuilder().executionContext(context).errorResponseHandler(errorHandler).request(request)
.execute(responseHandler);
} catch (Exception e) {
e.printStackTrace();
}


}

但是它给了我一个 403 禁止错误。当我使用端点 url 执行 Curl XGET 时,我得到了结果。我在这里做错了什么?

com.amazonaws.AmazonServiceException: (Service: null; Status Code: 403; Error Code: Forbidden; Request ID: null) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:742) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)

最佳答案

关于java - 使用 AWS SDK 从 AWS Elastic search 获取索引时出现 403 禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552485/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com