我有一些 Java 代码需要针对运行 NTLM 身份验证的 Sharepoint 服务器进行身份验证。我在 IDE 的命令行上运行良好,但是当我在 Liferay 中将其作为 portlet 部署时,它只是失败并显示 401 Unauthorized。
除了调用方式不同,代码完全相同。一个是在 doView() portlet 方法期间(portlet 呈现阶段),另一个(有效)来自公共静态 void main 方法。
我将 Jespa 日志设置为级别 4 以查看输出。在 NetBeans IDE 中:
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: null
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: NTLM2 Session Security key negotiated successfully
NtlmSecurityProvider: Initiator negotiated NTLMv2
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=200
在 Liferay 日志中:
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
NtlmSecurityProvider: null
HttpPeer: state=ST_SENT
HttpPeer: state=ST_RECEIVED status=401
18:37:58,578 ERROR [SharepointListPortlet:76]
java.security.PrivilegedActionException: our.portlet.util.HttpException: 401 Unauthorized
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at jespa.security.RunAs.runAs(RunAs.java:261)
at jespa.security.RunAs.runAs(RunAs.java:269)
这可能很简单,但我不能指望它。我查看了所有 Jespa 示例代码,但一无所获。当然 Jespa 是一种商业产品,我只是在评估它,所以我无法支付支持费用。如果有人有任何建议,我将不胜感激。