你需要收集用户的所有信息记录在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);
}
如果你存储在会话中的登录用户,那么你想添加另一个钩子上会破坏就发出注销任何已登录的用户。我不确定Grails如何适合图片,但是在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);
}
}
你也可以让User
模型实现HttpSessionBindingListener
。只要User
实例被放入会话中或从中删除(这也会在会话销毁时发生),将自动调用已实现的方法。
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!
}
此URL需要登录,所以它是无用的人谁是不能或不会在该网站上注册。 – BalusC 2010-07-17 13:53:49
@BalusC问题已更新 – fabien7474 2010-07-17 16:12:42