2012-04-12 61 views
3

我正在用JPA構建struts 2應用程序。用戶可以多次登錄到應用程序。我想要訪問Struts 2中的所有用戶會話

  1. 用戶能夠在網格中查看他的所有會話,並可能突出顯示當前會話,並且可以選擇用戶選擇會話並終止它。
  2. 管理員還應該能夠看到所有登錄的用戶,並且還可以查看每個登錄用戶的所有會話,還可以選擇終止任何會話。

感謝

回答

5

我覺得HttpSessionBindingListener是你在尋找的。 我不會寫下來的完整代碼,只是建議你一個方法,你可以做到這一點:

您可以將靜態字段(圖)添加到您的User class (DTO)在那裏你將存儲所有活動sessions of users。 :

e.g private static Map<User, HttpSession> usersSessions= new HashMap<User, HttpSession>();

然後讓User class implemets HttpSessionBindingListener。這樣,您就可以指定valueBound(HttpSessionBindingEvent event)方法中,你可以抓住實際創建session,並把它變成你的usersSessions這樣的:

usersSessions.put(this, event.getSession());

valueUnbound(HttpSessionBindingEvent event)方法則:

usersSessions.remove(this);logout後刪除users session

這種方式,你有Map你所有的active sessions還與它所屬的用戶的信息。海事組織你可以很容易地找出你的其他問題。

+0

使用ThreadLocal對象或模式來監視用戶會話是否有意義?無論如何感謝您的回答。讓我試試看。 – 2012-04-13 10:20:27

+1

我不這麼認爲。您必須將會話存儲在所有用戶可見的靜態字段中,因爲您希望有可能使管理帳戶的會話無效。如果沒有這個靜態字段,這是不可能的,因爲你不能從一個會話訪問另一個會話 - 所以你不能使它無效。但是通過這種方式,您可以從該靜態字段獲得實際的用戶會話,並輕鬆地使所需的會話無效。 – Fallup 2012-04-13 12:22:22