Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jespa NTLM身份验证在一个环境中失败_Java_Sharepoint_Liferay_Ntlm_Jespa - Fatal编程技术网

Java Jespa NTLM身份验证在一个环境中失败

Java Jespa NTLM身份验证在一个环境中失败,java,sharepoint,liferay,ntlm,jespa,Java,Sharepoint,Liferay,Ntlm,Jespa,我有一些Java代码需要针对运行NTLM身份验证的Sharepoint服务器进行身份验证。我在IDE的命令行中可以很好地运行这段代码,但是当我在Liferay中将其作为portlet部署时,它只是失败了 代码完全相同,只是调用方式不同。一个是在doView()portlet方法(portlet呈现阶段)期间,另一个(有效)来自公共静态void main方法 我将Jespa日志设置为4级以查看输出。在NetBeans IDE中: HttpPeer: state=ST_SENT HttpPeer:

我有一些Java代码需要针对运行NTLM身份验证的Sharepoint服务器进行身份验证。我在IDE的命令行中可以很好地运行这段代码,但是当我在Liferay中将其作为portlet部署时,它只是失败了

代码完全相同,只是调用方式不同。一个是在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是一个商业产品,我只是在评估它,所以我无法支付支持费用。如果有人有任何建议,我将不胜感激。

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


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

Liferay使用的应用程序服务器是什么?它似乎在启动时指定了一个安全策略文件。它是Tomcat—只是标准的Liferay捆绑包。命令是这样的:我认为方向不对。检查API中的
PrivilegedActionException
,它说它是另一个异常的包装器,因此您需要捕获它,并将
getException()
添加到日志中以查找根本原因。谢谢,但这不是问题所在。包装异常是上面的HttpException。问题与NTLM质询响应有关。某种原因导致它在一种环境中失败,而不是在另一种环境中失败。在这两种情况下,代码都是用正确的参数调用的。是的,我在编写代码后意识到了这一点。对不起,现在只是猜测。