我有一些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