我正在用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的最新稳定版本,因为旧版本存在线程本地存储清理问题,有时会将一个用户的结果泄漏到另一个用户的请求范围中。 –