我有一些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是一种商业产品,我只是在评估它,所以我无法支付费用。如果有人有任何建议,我将不胜感激。
答案 0 :(得分:0)
即使您尚未购买该产品,IOPLEX支持仍然可以为您提供帮助。
关于您的问题,请尝试使用“标题属性”提供凭据,而不是使用javax.security.auth.Subject来提供凭据。也许你的Liferay东西正在创建新的线程,基于主题的凭据正在被删除。此功能未在任何地方记录(因此从技术上讲,它不受支持),但请查看示例/ HttpGetWithHeaderProperties.java。