gpt4 book ai didi

java - JCIFS 可以与 Jersey 一起使用吗?

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

我在将 NTLM 身份验证添加到使用 Jersey 和 Apache HttpClient 的现有应用程序时遇到问题。我只能使用 JCIFS 进行身份验证,HttpClient 的默认 NTLM 身份验证不起作用(我得到 401)。

Apache HttpClient 页面的示例显示了如何使用 CloseableHttpClient: https://hc.apache.org/httpcomponents-client-4.5.x/ntlm.html

Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
.register(AuthSchemes.NTLM, new JCIFSNTLMSchemeFactory())
.register(AuthSchemes.BASIC, new BasicSchemeFactory())
.register(AuthSchemes.DIGEST, new DigestSchemeFactory())
.register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory())
.register(AuthSchemes.KERBEROS, new KerberosSchemeFactory())
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultAuthSchemeRegistry(authSchemeRegistry)
.build();

但是对于 CloseableHttpClient,我无法使用 target 之类的方法:

WebTarget target = client.target(this.my Address).path(elementPath)
.resolveTemplate(P_ID, myId);

只有执行

我不确定是否应该重写整个应用程序并仅使用基本的 HttpClient 调用,例如:

HttpGet httpGet = new HttpGet(repositoryAddress + "/" + "element/70032_1498404600000(,,arm)");
CloseableHttpResponse response = httpClient.execute(httpGet);

或者还有其他方法可以在 javax.ws.rs.client.Client 中设置 AuthSchemes,可以在 Jersey 中使用?

最佳答案

我遇到了类似的问题,我的方法如下:

1) 如果您使用 ApacheConnectorProvider 作为连接器,您可以覆盖 ApacheConnector 代码(在此处找到 https://github.com/jersey/jersey/tree/master/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector )。就我而言,我必须创建自定义 ConnectorProvider 和 Connector。

2) 创建自定义属性或使用 HttpClientContext.AUTHSCHEME_REGISTRY 并将其放入 ClientConfig 中(这是我们在 Jersey Client 中为客户端设置属性的方式)。

3) 当您调用 builder.get( 或 post 或任何其他方法) 时,将调用自定义连接器。在自定义连接器中,您可以检查在上述步骤中设置的属性。如果设置了,您可以像为 ClosableHttpClient 指定那样设置 DefaultAuthSchemeRegistry(ApacheConnector 在其实现中使用 ClosableHttpClient)。

这可能是一种黑客行为,但对我来说效果很好。希望这有帮助:)

关于java - JCIFS 可以与 Jersey 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875054/

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