我有一些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是一款商业产品,我只是在评估它,所以我无法支付费用。如果有人有任何建议,我会很感激。
什么是您用于Liferay的应用程序服务器?它似乎是在启动时指定一个安全策略文件。 – 2011-03-16 23:42:05
它是Tomcat--只是标准的Liferay捆绑包。下面是命令: – 2011-03-17 10:57:02
我认为是错误的方向。检查API是否有'PrivilegedActionException',它说它是另一个Exception的包装,所以你需要捕获它并且在日志中添加'getException()'来找到根本原因。 – 2011-03-17 11:14:09