2010-01-29 40 views
1

似乎從Flex客戶端到Struts後端沒有使用Cookie的I have to find a different way to transmit the session token我應該在什麼時候改變Struts獲取會話令牌的方式?

如果我要將會話令牌放入請求的有效負載中,我需要在什麼時候定製Struts的行爲,以便儘可能多地重用現有的會話處理?特別是,我不想重新實現任何安全措施(例如將令牌綁定到IP)和配置參數(例如會話到期間隔)。

有一個CreateSession攔截器,而不是在默認堆棧的早期階段,我應該將它與子類版本交換嗎?

回答

-1

我對Flex不是很有經驗,但是因爲這看起來很有趣,而且我不喜歡看到問題沒有得到答案,所以我想我會對它有所暗示。據我所知,Flex會話(HttpFlexSession)和HttpSession是完全獨立的實體。這就是說你應該能夠在它們之間共享數據。

Steven Webster和Alistair McLeod撰寫的書「Developing Rich Clients with Macromedia Flex」中提供了非常相關的免費章節(Chapter 20: Flex Integration with J2EE)。

現在我會引用這個免費的章節!特別值得注意的是:

維護國家

理解到 最大的飛躍做出的是,不再有一個 需要HTTP會話狀態。儘管您在胖客戶端和 服務器之間的請求最終是通過HTTP進行的,但HTTP已經減少爲 傳輸技術,而不是 技術,我們需要將 與之集成。 J2EE開發人員通過在HTTP請求和 響應對象中放置參數 以及通過在HTTP會話中存儲對象來保持 狀態的概念,使得開發人員很舒服 。 ...

...的Flex其實是可以提供訪問 HTTP會話,並允許Flex的 客戶端處理HTTP會話 「只是另一個服務器上的對象。」 但是,根據我們的經驗,使用 HTTP會話應該是一個「難聞的氣味」 ,它標識重構 機會,將您的某些 應用程序狀態轉移到客戶端。

本章稍後將介紹如何爲Flex客戶端訪問配置會話對象。

獲得訪問J2EE會話

Flex的預配置默認的web.xml文件會話的servlet ,這使得 可用於訪問和 可用服務器端Java 對象修改一個 應用程序的J2EE會話。通過將 之一以下的services.mxml在 我們的服務定位遠程對象定義, 我們提供給我們的應用程序 服務,可以得到與在J2EE會話對象集 ,以及刪除從 對象會議:

<mx:Remote object source="servlet" id="sessionObject" /> 
<mx:Remote object source="@ContextRoot()" id="sessionObject"/> 

與任何其他< MX:RemoteObject的> 標籤,會話服務可以使用 結果和故障事件處理程序 處理請求以從 獲取會話中的項目。 web.xml描述符 將會話名稱 servlet定義爲servlet;因此,我們使用 的以下示例之一與J2EE會話中工作 :

sessionObject.session("set","customerID", 700); 
sessionObject.session("get", "customerID"); 
sessionObject.session("remove", "customerID"); 

這三個例子說明如何 會話服務是用來獲取, 集或刪除項目來自Flex客戶端的J2EE 會話。

所以它似乎是,雖然你可撓曲和後端Java之間的共享會話數據,但是,該建議似乎是,這是一個反模式

關於安全措施,如果您使用Servlet過濾器來實現IP限制,那麼您的安全性可以應用於您的Web應用程序中的所有資源(無論它是來自Struts還是Flex源)。

+0

對不起,我很欣賞你在答案中所做的工作,但不幸的是,這很不重要。我的問題根本不在於Flex(客戶端),而是關於Struts中(服務器端)需要做什麼。另外我不使用他們在文章中提到的服務器組件。我明確尋找一個基於Struts的解決方案。 – 2010-04-14 15:21:50

相關問題