我正在用Wicket構建我的第一個Java應用程序,並且與Wicket會話有點問題。Wicket會話與多個用戶登錄
我的問題:當第二個用戶登錄到應用程序時,他會覆蓋第一個用戶的會話 - >兩個都在第二個會話中工作。雖然這兩個用戶創建一個新的會話在登錄時
我的代碼:
WicketSession.java:
public class WicketSession extends WebSession {
private UserBean currentUser;
public WicketSession(Request request) {
super(request);
}
public static WicketSession get() {
return (WicketSession) Session.get();
}
// getter/setter
在我的應用程序類
:
@Override
public Session newSession(Request request, Response response) {
return new WicketSession(request);
}
和登錄(短版本w/o ifs,使其可讀):
@Override
public final void onSubmit() {
if (signIn(wiaUsername, wiaPassword)) {
getSession().bind();
setResponsePage(new CharListDetail());
} else {
error("Unknown username/ password");
}
}
private boolean signIn(String username, String password) {
currentUser = UserProxy.getInstance().getElementByUser(username, password);
WicketSession.get().setCurrentUser(currentUser);
return true;
}
這一切都適用於一個用戶。但是第二個用戶登錄的時刻
WicketSession.get().setCurrentUser(currentUser);
將當前用戶設置爲新用戶並且兩個登錄用戶都是相同的。我如何防止這個問題?
你爲什麼認爲第二個用戶會覆蓋會話?你想同時在同一瀏覽器中登錄兩個用戶嗎?不同瀏覽器中的兩位用戶可以正常工作。即使會話是一個單例,它只是本地線程變量,所以你不必害怕它。 –
對於測試,我使用了兩個不同的瀏覽器,我用兩個不同的用戶登錄。 我使用兩者登錄並顯示用戶特定列表。當我切換到第一個用戶並重新加載頁面時,會顯示第二個用戶的列表。 該列表是這樣生成的: CharProxy.getInstance()。getAllCharsForCurrentUser(WicketSession.get()。getCurrentUser()); – Markus
檢查您的代碼是否有'static'修飾符。這些通常容易造成跨部門污染。另外,請確保使用Wicket的最新穩定版本,因爲舊版本存在線程本地存儲清理問題,有時會將一個用戶的結果泄漏到另一個用戶的請求範圍中。 –