2012-10-01 74 views
0

我們在weblogic 10.3.7中部署了我們的應用程序中的JSF2.1.7,我們有默認的state_saving_method到服務器JSFViewState ID會話範圍?

我們的安全可以成功地進行以下測試..

Session 1 
    1) Access the login page 
    2) Post the login request with successful login. 
    3) record the login form values along with ViewStateId. 

Session 2 
    1) Access the login page 
    2) Post the login request with form values including view state id from session 1. 
    3) successful login (but expected view expired as it is different session). 

ViewState的ID只能在一個會話中使用的證明不正確使用服務器狀態保存方法。

但是,它不是存儲在服務器的會話ID的視圖狀態? ,有沒有在我們的設置失蹤?

謝謝

回答

0

我會說這是按設計工作。 javax.faces.ViewState(對於SERVER狀態保存模式)對象旨在保留在會話中查看的頁面的條件,並使用viewStateId作爲映射到服務器端對象的關鍵字。根據JSF實現,每個會話都可以保存固定數量的視圖狀態對象。如果客戶端試圖回傳一個viewStateId不能與在StateManager鑰匙匹配或用於指定會話的任何地方發現的,JSF將推定的關鍵可能是出現在一些點,並簡單地到期,因此ViewStateExpiredException

+0

所以javax.faces.ViewState是一個會話作用域值,我們的問題是一個會話中的viewstateid可以如何用於其他? – user684434

+0

@ user684434如果我正確地閱讀了您的問題,當您嘗試在另一個會話中使用相同的視圖狀態ID時,它失敗了,是否正確?這是預期的行爲,因爲不需要上下文來驗證是否在另一個會話中使用了相同的視圖狀態ID。一旦在當前會話中找不到viewstateId,上下文會簡單地假定視圖狀態Id以前可能已附加到該會話,但由於許多原因已被刪除 – kolossus

+0

不,成功登錄(但預期視圖已過期,因爲它是不同的會話)。它應該引發ViewExpired異常。 – user684434