0

我有一些 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 是一种商业产品,我只是在评估它,所以我无法支付支持费用。如果有人有任何建议,我将不胜感激。

4

1 回答 1

0

即使您尚未购买该产品,IOPLEX 支持仍会为您提供帮助。

关于您的问题,不要使用 javax.security.auth.Subject 提供凭据,而是尝试使用“标头属性”提供凭据。也许您的 Liferay 正在创建新线程,并且基于主题的凭据正在被丢弃。此功能在任何地方都没有记录(因此在技术上它不受支持),但请查看示例/HttpGetWithHeaderProperties.java。

于 2011-11-01T03:41:42.673 回答