您需要在
Set<User>
在
应用
范围。只是勾上
login
和
logout
并添加和删除
User
因此。基本上:
public void login(User user) {
// Do your business thing and then
logins.add(user);
}
public void logout(User user) {
// Do your business thing and then
logins.remove(user);
}
如果您要在会话中存储已登录的用户,那么您需要添加另一个hook-on会话销毁,以便在任何已登录的用户上发出注销。我不确定GRAIUS是如何匹配的,但是在Java Servlet API中,您希望使用
HttpSessionListener#sessionDestroyed()
为此。
public void sessionDestroyed(HttpSessionEvent event) {
User user = (User) event.getSession().getAttribute("user");
if (user != null) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(user);
}
}
你也可以让
用户
模型实现
HttpSessionBindingListener
. 每当
用户
实例已放入会话或从中删除(会话销毁时也会发生这种情况)。
public class User implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.add(this);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins");
logins.remove(this);
}
// @Override equals() and hashCode() as well!
}