gpt4 book ai didi

java - Apache olingo 基本身份验证编码问题

转载 作者:行者123 更新时间:2023-11-29 04:25:29 29 4
gpt4 key购买 nike

我正在使用 Apache olingo 开发 OData 客户端,凭据包含 native 字符,应该以 UTF-8 读取“授权” header 的 Base64 编码。第一种方法是 Olingo 建议的标准方法:

EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(endpointURI, ContentType.JSON);
client.getConfiguration().setHttpClientFactory(new BasicAuthHttpClientFactory(username, password));

但这对我不起作用,因为 Olingo 读取 US-ASCII 字符集中的“用户名”和“密码”字节以进行 Base64 编码,而我的用户名变成了 ??? .在 HTTP 客户端级别,有一种方法可以将字符集传递给 org.apache.http.impl.auth.BasicSchemeFactory ,但我发现无法在 Olingo 级别对其进行自定义。

我的第二次尝试是添加一个原始 header :

URI searchURI = client.newURIBuilder(endpointURI)
.appendEntitySetSegment(segment)
.top(10)
.addQueryOption(QueryOption.FORMAT, "json")
.build();
ODataEntitySetRequest<ClientEntitySet> request = client.getRetrieveRequestFactory().getEntitySetRequest(searchURI);
String auth = Base64.encodeBase64String(String.format("%s:%s", username, password).getBytes(StandardCharsets.UTF_8));
request.addCustomHeader("Authorization", "Basic "+ auth);
ODataRetrieveResponse<ClientEntitySet> response = request.execute();

但看起来 Olingo 实际上在 request.execute 调用下发送了 2 个 HTTP 请求。第一个是数据,它包含我的标题,通过授权并返回数据 - 很好。但是第二个请求是针对元数据的,没有 Authorization header ,并返回 401 Unauthorized。所以最后的结果是异常。我需要一种添加基本身份验证的方法。这将在完整的 Olingo 请求周期中工作(多个 http 请求,并使用 UTF-8 字符集作为我的凭据。或者,以某种方式禁用元数据调用(如果 Olingo 始终使用它来构建响应对象,则可能是不可能的)

最佳答案

找到了解决方案,但仍然对 Olingo 推荐的方式感兴趣

            EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(endpointURI, ContentType.JSON);
final String auth = Base64.encodeBase64String(String.format("%s:%s", username, password).getBytes(StandardCharsets.UTF_8));
client.getConfiguration().setHttpClientFactory(new DefaultHttpClientFactory() {
@SuppressWarnings("deprecation")
@Override
public DefaultHttpClient create(HttpMethod method, URI uri) {
final DefaultHttpClient client = super.create(method, uri);
client.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
request.addHeader("Authorization", "Basic " + auth);
}
});
return client;
}
});

关于java - Apache olingo 基本身份验证编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46598854/

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