2011-03-16 47 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。