目前有一個我正在使用的Web應用程序,它必須擴展以公開Web服務。在當前項目中 - 在啓動時加載應用程序上下文時 - 進行數據庫查詢,並將靜態數據(如角色名稱)設置爲會話級別的變量。 像這樣:如何在Spring Web應用程序中將數據從Session的屬性移動到應用程序上下文?
private void loadRoles(ServletContext acontext) {
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(acontext);
IMyDataService myDataService = (IMyDataService) appContext.getBean("myDataService");
List<Roles> rolesList = myDataService.listRoles();
acontext.setAttribute(MyAppConstants.ROLES, rolesList);
}
存儲在會話屬性此值用作應用程序的其他地方如下:
public boolean checkAccess(HttpServletRequest arequest) {
HttpSession session = arequest.getSession();
List<Role> roles = (List<Roles>)session.getServletContext().getAttribute(MyAppConstants.ROLES);
.....
}
如果我要增強應用程序公開Web服務 - 我的理解是我將不再擁有可用的ServletSession或HttpServletRequest。所以我想把這個靜態數據從會話變量移到另一個地方,以便它們在上下文中可用。
有沒有一種方法可以實現這個目標? 我試圖擺脫存儲會話變量中的數據一起,但不能這樣做,因爲只有太多的引用。 有沒有更好的方法?
在您的例子中,數據在應用範圍(appContext)店,而不是在會話範圍。這有點令人困惑...... –
@ Jean-PhilippeBond - 我編輯了添加方法簽名的代碼。添加角色列表的「acontext」是一個ServletContext。在使用此列表的應用程序中的其他位置,將從應用程序上下文中獲取會話,然後使用該值。 – user811433
編輯該問題的進一步細節 – user811433