java - 我怎样才能让 jcifs 与 apache axis 很好地配合

标签 java axis2 ntlm

我需要将 Apache Axis 1.4 连接到使用 NTLM 身份验证来限制对其操作的访问的 Web 服务。 我希望使用 Samba Jcifs 来处理 NTLM 握手。

我找到了

http://hc.apache.org/httpcomponents-client/ntlm.html

这为我提供了有关如何使用 jcifs 连接 HttpClient 4.0 的绝妙指导。

问题是,Axis 想要使用 Http Client 3.0,这两个 api 看起来非常不同。

我可以看到两种可能性

  1. 为 Axis 编写一个对象,让它插入 HttpClient 4。
  2. 找出如何将 HttpClient 3.0 与 Samba Jcifs 连接起来。

数字 1. 看起来不平凡,但可能 第 2 点。我在网上找不到任何描述如何做到这一点的鼓舞人心的消息。

我的问题是:有没有人成功地将 samba jcifs 与 HttpClient 3.0 连接起来? 是否有人已经创建了与 HttpClient 4 一起使用的 Axis HttpSender 对象?

有没有我没有考虑过的更好的选择?

最佳答案

终于有了解决办法。

问题

Apache Axis 使用 Apache HTTPClient,它提供了自己的 NTLM 实现。
但是这个实现是不完整的;只支持原始的LM认证。
我需要连接的系统坚持使用更新的 NTLM 身份验证。

因此,在将 Apache HTTP 客户端与 NTLM 结合使用时,我的 Web 服务无法通过身份验证。

这实际上进入了一个无限循环,因为 HTTPClient 将永远不会停止尝试和失败的身份验证。

解决方案

jcifs 完全支持所有 3 个版本的 NTLM 握手。
我已将 org.apache.commons.httpclient.auth.NTLM 复制并粘贴到我自己的类中(它被声明为“final”以阻止继承)

然后我覆盖了这个方法

public String getType3Message(
        String user, String password, String host, String domain,
        byte[] nonce) throws AuthenticationException

构建jcifs.ntlmssp.Type3Message的实例 并使用此对象返回已正确生成 NTML 身份验证的 Type3Message

然后我需要创建自己的 org.apache.commons.httpclient.auth.AuthScheme 实例 利用这个新的 NTLM 实现。称呼 org.apache.commons.httpclient.auth.AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, MyNewAuthScheme.class)

启动我的 WS 端点 stub 。

它有效!!!

关于java - 我怎样才能让 jcifs 与 apache axis 很好地配合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916820/

相关文章:

java - 在 Selenium 中运行 Java 代码时检测到 borken kqueue

java - apache axis2 com.ctc.wstx.exc.WstxUnexpectedCharException 错误

android - KSoap-Android\JCIFS 发送空的 HTTP post

Python 无法使用 ntlm 进行身份验证

java - 使用 0 到另一个 java 类中的多个对象初始化对象

java - SQLite数据库问题未在数据库中插入数据

c - Axis2 加载 DLL 失败

java - 在 Intellij : ClassNotFoundException: org. apache.woden.WSDLException 中生成 WSDL 时出错

php - 使用 PHP 和 cURL 访问 Exchange Web 服务

java - 在实现类或接口(interface)中注释方法?