2011-03-16 114 views
0

我有一些Java代码需要根据运行NTLM身份验证的Sharepoint服务器进行身份验证。我的代码在IDE中的命令行上运行良好,但是当我将它作为portlet部署在Liferay中时,它只是在401未授权的情况下失败。Jespa NTLM身份验证在一个环境中失败

的代码是完全不同的,在它的调用方式相同。一个是在doView()portlet方法(portlet呈现阶段)期间,另一个(工作方式)来自public static 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

什么是您用于Liferay的应用程序服务器?它似乎是在启动时指定一个安全策略文件。 – 2011-03-16 23:42:05

+0

它是Tomcat--只是标准的Liferay捆绑包。下面是命令: – 2011-03-17 10:57:02

+0

我认为是错误的方向。检查API是否有'PrivilegedActionException',它说它是另一个Exception的包装,所以你需要捕获它并且在日志中添加'getException()'来找到根本原因。 – 2011-03-17 11:14:09

回答

0

IOPLEX支持仍然会帮助你,即使你没有购买该产品。

对于不是使用javax.security.auth.Subject提供凭据,请尝试使用提供“标题属性”凭据你的问题。也许你的Liferay thingy正在创建新的主题,并且基于主题的凭证正在被丢弃。这个特性在任何地方都没有文档记录(技术上它不被支持),但看看examples/HttpGetWithHeaderProperties.java。