java - 无法使用 Java API 访问数据中心服务
问题描述
我正在尝试使用 Java API 在我的数据中心服务上执行搜索。不幸的是,服务器返回了Unauthorized
响应。这是代码:
public Object doSearch() throws NoSuchAlgorithmException, KeyManagementException {
String user = *****;
String password = ******;
String db = "data-hub-FINAL";
String host = "***********.marklogicsvc.com";
int port = 8011;
SecurityContext auth = new DatabaseClientFactory.DigestAuthContext(user, password).withSSLContext(SSLContext.getDefault());
DatabaseClient client = DatabaseClientFactory.newClient(host, port, db, auth);
try {
QueryManager qm = client.newQueryManager();
StructuredQueryBuilder qb = qm.newStructuredQueryBuilder();
qm.setPageLength(100);
var query = qb.collection("listings");
return qm.search(query, new SearchHandle());
} finally {
client.release();
}
}
我怀疑我使用了错误的凭据,但是当我在 Visual Studio Code Marklogic Extension 中尝试它们时效果很好,这是我的 VS Code 设置和查询:
“marklogic.modulesDb”:“数据集线器模块”, "marklogic.host": "*******.marklogicsvc.com", "marklogic.password": *******, "marklogic.username": *******, “marklogic.ssl”:是的, “marklogic.port”:8011
询问:
xquery version "3.0";
declare namespace cts = "http://marklogic.com/cts";
cts:search(fn:collection(("listings")), cts:and-query(()))
如果您告诉我无法连接到 DHS 的 Java 代码有什么问题,我会非常高兴。
解决方案
@rjrudin 的答案是正确的,但这里有一个完整的代码片段应该可以工作。
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
X509TrustManager trustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
sslContext.init(null, new TrustManager[] { trustManager }, null);
return DatabaseClientFactory.newClient(
host, port,
new DatabaseClientFactory.BasicAuthContext(user, password).withSSLContext(sslContext, trustManager),
DatabaseClient.ConnectionType.GATEWAY
);
请注意该DatabaseClient.ConnectionType.GATEWAY
参数,因为您通过负载均衡器与 DHS 连接。
另请注意,这不是在验证证书。对于生产实施,您可能希望在您的信任管理器中具有满足您的安全要求的逻辑。
推荐阅读
- java - 如何在手机视图中将动画右用于侧边栏菜单?
- java - Play Framework 2.7 授权获取用户
- angular - 使用 Angular + 材料在 IE 11 中的输入类型 =“数字”中支持“,”
- virtualbox - minikube 启动失败 - 没有这样的用户
- sql - 如何选择不重复的日期间隔?
- hibernate - 如何使用链接表完成@ManyToOne 映射?
- html - 将绝对定位的子级设置为父级的 100% 宽度,包括边框
- r - 如何使用 gsub 提取主题标签
- c++ - 启用从此崩溃中共享
- postgresql - postgres 检查指针进程以退出代码 0 退出