2013-04-02 68 views
2

目前,我正在爲PACS查看器(醫學圖像)開發REST Web服務。這個webservice需要加密/模糊參數,以確保用戶不能用參數模糊來從其他患者獲取數據。Wicket Session和Jersey REST webservice

在檢票面板IM設置一個會話屬性:

wicketSession.setAttribute("study", studyInstanceUID); 

我想在澤西Web服務來訪問此屬性,但該會議不包含在我的球衣web服務的任何屬性。它似乎不是注入或檢索?而不是它創建一個新的?與從客戶端發送的當前SessionID進行會話。

我已經創造了球衣web服務的過濾器和映射器:

<filter-mapping> 
    <filter-name>WicketSessionFilter</filter-name> 
    <url-pattern>/pacsviewer/*</url-pattern> 
</filter-mapping> 

但是,這似乎並沒有有什麼區別?我認爲我在web服務的注入或狀態方面做錯了什麼?

+0

您的過濾器是否按照正確的順序排列,即會話過濾器是否在澤西島過濾器之前?我一直在使用過濾器來訪問Resteasy的wicket會話,迄今爲止它工作得很好。 – Thomas

回答

3

如果您編寫自己的過濾器,則可以在底層HttpSession中讀取與您的Wicket會話對應的對象位於「wicket:$ {filterName}:會話」屬性下時將以下內容放入web.xml

<filter> 
    <filter-name>SessionFilter</filter-name> 
    <filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class> 
    <init-param> 
     <param-name>filterName</param-name> 
     <!-- expose the session of the input example app --> 
     <param-value>wicket.Main</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SessionFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

然後你可以用下面的Java代碼Wicket的Session對象在自己的過濾器,例如(加空支票和其他樣板代碼):

HttpSession session = httpRequest.getSession(false); 
WebSession wicketSession = session.getAttribute("wicket:wicket.Main:session"); 
//do whatever you want with this 
//I think a wicketSession.getAttribute("study") 
0

是綁定到HttpSession會話對象? Wicket會嘗試延遲實際的會話跟蹤,直到遇到有狀態的頁面(例如具有AJAX功能的頁面)。您可以使用綁定會話:

getSession().bind(); 

這將確保Wicket的會話綁定,並在容器的HttpSession依然存在,容器將跟蹤會話。