2013-06-22 83 views
2

我有一個使用cxf DOSGi [1]的客戶端 - 服務器應用程序。現在我想從服務器驗證客戶端併爲客戶端創建一個會話。客戶端將擁有一個用於訪問一旦通過身份驗證的服務的cookie。我想知道什麼是服務器訪問HTTP會話的最佳方式,以及一旦通過身份驗證後在客戶端存儲cookie的最佳方式。使用Apache CXF進行身份驗證和會話管理DOSGi

我正在考慮在應用程序級別創建一個自定義Session對象,一旦通過驗證並向客戶端發送一個Cookie對象。所以當客戶端訪問服務方法時,它會將cookie作爲參數傳遞。客戶將通過每種服務方法進行驗證。但我不認爲這是處理這個問題的最好方法,因爲每個服務方法必須有一個單獨的參數來傳遞Cookie。

我在使用Google時遇到了這個問題[2]。是否有可能在DOSGi的服務中獲得「WebServiceContext」?即使我得到它,如何將cookie存儲在客戶端,並確保客戶端在每個後續的Web服務調用中都發送cookie?

[1] http://cxf.apache.org/distributed-osgi-greeter-demo-walkthrough.html

[2] How can I manage users' sessions when I use web services?

任何幫助高度讚賞。 謝謝。

+0

您是否需要會話來創建一個有狀態的服務,或者您只是想維護它的身份驗證?萬一它只是身份驗證,爲什麼不簡單地使用基本身份驗證爲每個電話? –

+0

我不想要一個有狀態的服務。要求是驗證用戶,並只允許授權用戶訪問該服務。要爲每次調用使用基本身份驗證,每次訪問服務方法時,客戶端都必須傳遞用戶令牌。我怎麼做?這是可能的DOSGi,因爲AFAIU我不能從OSGi級別獲得Web服務請求信息? – Jeewantha

回答

1

您可以使用自定義意圖來控制身份驗證。基本上,一個意圖是DOSGi應用於web服務的CXF功能。您可以在單獨的包中創建該功能,然後使用其名稱的特殊屬性進行發佈:請參閱DOSGi reference guide

在一個項目中,我們創建了一個讀取包含身份驗證上下文的threadlocal並使用存儲在那裏的憑據來填充CXF身份驗證的功能。因此,您只需在應用程序開始時將證書一次存儲到threadlocal中,並且所有調用都可以工作。

目前這種情況下目前還沒有簡單的文檔或示例,但我計劃在不久的將來創建它,因爲身份驗證是一個常見問題。我打算使用shiro作爲認證框架併爲CXF編寫通用適配器。一旦準備就緒,我會盡快添加評論或其他答案。在此期間,您可以嘗試自己做同樣的事情。

+0

感謝您的回答。我有一個問題。客戶如何通過某種令牌發送其認證信息?服務器如何在認證階段提取該信息? – Jeewantha

+0

以最簡單的形式,您使用intercpetor將用戶名和密碼設置爲CXF中的消息屬性,以便http傳輸身份驗證可以選取。在服務器端,您將不得不安裝一個攔截器來評估憑據,並允許或拒絕訪問服務。 –

+0

@ChristianSchneider嗨基督教,爲什麼你決定使用Shiro而不是使用JAAS與[JAASLoginInterceptr](http://cxf.apache.org/docs/security.html#Security-JAASLoginInterceptor)? –

相關問題