我有一些Java代码需要针对运行NTLM身份验证的Sharepoint服务器进行身份验证。我让这段代码在IDE的命令行上运行得很好,但是当我将它作为portlet部署在Liferay中时,它就失败了,并显示401未授权。
代码是完全相同的,只是调用方式不同。一种是在doView() portlet方法期间(portlet呈现阶段),另一种是来自公共静态void main方法(可以工作)。
我将Jespa日志设置为4级以查看输出。在NetBeans集成开发环境中:
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是一个商业产品,我只是在评估它,所以我不能支付支持费用。如果有人有任何建议,我将不胜感激。
发布于 2011-11-01 11:41:43
即使您尚未购买产品,IOPLEX支持仍将为您提供帮助。
关于您的问题,请尝试使用"header properties“提供凭据,而不是使用javax.security.auth.Subject提供凭据。也许你的Liferay东西正在创建新的线程,而基于主题的凭据正在被删除。这个特性在任何地方都没有文档记录(因此从技术上讲它不受支持),但是可以查看examples/HttpGetWithHeaderProperties.java。
https://stackoverflow.com/questions/5330364
复制相似问题