ali*_*eiu 5 authentication ntlm apache-httpclient-4.x ewsjavaapi
我想知道错误消息MSG_TYPE1_GENERATED和MSG_TYPE3_GENERATED(来自httpClient/NTLMScheme.State枚举)表示帮助调试我们遇到的问题。有人可以提供这些错误的文档吗?
我有一个服务器应用程序,它使用ews-java-api 2.0连接到配置了NTLM 身份验证的Exchange Server 2016 。 我已经配置了HttpClient版本4.5.2。服务器应用程序使用 Exchange 服务帐户从 Exchange 服务器检索房间和会议。房间和会议已成功检索,但在成功运行一段时间后,我在日志中看到以下错误:
ERROR org.apache.http.impl.auth.HttpAuthenticator - NTLM authentication error: Unexpected state: MSG_TYPE3_GENERATED
Run Code Online (Sandbox Code Playgroud)
此错误之后是一些从 Exchange Server 收到的 401 未经授权的错误,应用程序在重新启动之前永远不会从此 401 错误中恢复(这通常每天发生几次)。
Caused by: microsoft.exchange.webservices.data.core.exception.http.HttpErrorException: The remote server returned an error: (401)Unauthorized
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:726)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:640)
... 34 more
Run Code Online (Sandbox Code Playgroud)
我不确定它是否与这个问题有关,但有时在MSG_TYPE3_GENERATED错误日志之后,我看到很多超时:
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:170)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:155)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:284)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:261)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:165)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:272)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at microsoft.exchange.webservices.data.core.request.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:286)
at microsoft.exchange.webservices.data.core.request.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:721)
... 39 more
Run Code Online (Sandbox Code Playgroud)
有时我会在错误日志中看到MSG_TYPE1_GENERATED而不是MSG_TYPE3_GENERATED。我查看了 HttpClient 库NTLMScheme.java源代码并找到了
enum State {
UNINITIATED,
CHALLENGE_RECEIVED,
MSG_TYPE1_GENERATED,
MSG_TYPE2_RECEVIED,
MSG_TYPE3_GENERATED,
FAILED,
}
Run Code Online (Sandbox Code Playgroud)
但似乎没有关于每个值的任何文档。我尝试将 HttpClient 的版本增加到4.5.3,因为我在发行说明中看到了一个与NTLM相关的问题 (https://issues.apache.org/jira/browse/HTTPCLIENT-1779)。之后我的应用程序似乎更稳定。我只看到 MSG_TYPE3_GENERATED 一次并且应用程序已经运行了好几天。
您认为将HttpClient从4.5.2升级到4.5.3 是否成功?你有什么其他的建议?
谢谢,阿林
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |