【发布时间】:2011-03-16 19:00:29
【问题描述】:
我有一些 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 是一个商业产品,我只是在评估它,所以我无法支付支持费用。如果有人有任何建议,我将不胜感激。
【问题讨论】:
-
您为 Liferay 使用的应用服务器是什么?它似乎在启动时指定了一个安全策略文件。
-
它是 Tomcat - 只是标准的 Liferay 捆绑包。这是命令:
-
我认为方向错误。检查
PrivilegedActionException的API,它说它是另一个异常的包装器,所以你需要捕获它并将getException()添加到日志中以找到根本原因。 -
谢谢,但不是这样。包装的异常是上面的 HttpException。该问题与 NTLM 质询-响应有关。有些东西导致它在一个环境中失败,而不是在另一个环境中。在这两种情况下,都会使用正确的参数调用代码。
-
是的,我写完之后才意识到。抱歉,现在只是猜测。
标签: java sharepoint liferay ntlm jespa