Java 多个用户登录的Wicket会话
我正在用Wicket构建我的第一个Java应用程序,但Wicket会话有点问题 我的问题是:当第二个用户登录到应用程序时,他会覆盖第一个用户的会话->两个用户现在都在处理第二个会话。尽管两个用户在登录时都创建了一个新会话 我的代码: WicketSession.java:Java 多个用户登录的Wicket会话,java,apache,session,wicket,Java,Apache,Session,Wicket,我正在用Wicket构建我的第一个Java应用程序,但Wicket会话有点问题 我的问题是:当第二个用户登录到应用程序时,他会覆盖第一个用户的会话->两个用户现在都在处理第二个会话。尽管两个用户在登录时都创建了一个新会话 我的代码: WicketSession.java: public class WicketSession extends WebSession { private UserBean currentUser; public WicketSession(R
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);
}
以及不带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);
将当前用户设置为新用户,并且两个登录用户相同。如何防止这个问题?在网上搜索了很多次后,我找到了解决方案
问题是我将currentUser保存为UserBean,而不是字符串。我不知道为什么在Wicket中将用户存储为Bean不起作用,但现在终于起作用了。为什么您认为第二个用户会覆盖会话?是否要在同一浏览器中同时登录两个用户?两个用户在不同的浏览器中工作正常。即使会话是单例的,它也只是一个局部线程变量,因此您不必担心它。为了进行测试,我使用了两个不同的浏览器,在这两个浏览器中,我与两个不同的用户登录。我使用这两种方法登录并显示用户特定的列表。当我切换到第一个用户并重新加载页面时,将显示第二个用户的列表。列表的生成方式如下:CharProxy.getInstance.getAllCharsForCurrentUserWicketSession.get.getCurrentUser;检查代码中的静态修饰符。它们通常容易发生跨会话污染。还要确保您使用的是Wicket的最新稳定版本,因为旧版本在线程本地存储清理方面存在问题,有时会将一个用户的结果泄漏到另一个用户的请求范围。我刚刚再次检查了静态修饰符,但没有发现任何问题。在我看来,当创建第二个会话时,wicket正在丢失第一个会话,即使我使用getSession.bind。还有其他人知道问题出在哪里吗?我刚刚发现会话是为每个用户保留的,只有当前用户更改为新用户。这意味着两个currentUsers是相同的。如何防止这种情况发生?请尝试使您的用户bean实现可序列化