0,0 → 1,104 |
package ak.hostadmiral.core.action.sessioncontrol; |
|
import java.util.Map; |
import java.util.Set; |
import java.util.HashSet; |
import java.util.Iterator; |
|
import javax.servlet.http.HttpSessionListener; |
import javax.servlet.http.HttpSessionActivationListener; |
import javax.servlet.http.HttpSessionEvent; |
import javax.servlet.http.HttpSession; |
|
import org.apache.log4j.Logger; |
|
import org.apache.struts.Globals; |
|
import ak.hostadmiral.util.ModelException; |
import ak.hostadmiral.util.ConfigInit; |
import ak.hostadmiral.core.model.User; |
import ak.hostadmiral.core.model.UserManager; |
import ak.hostadmiral.core.model.UserModifiedListener; |
import ak.hostadmiral.core.servlet.SessionKeys; |
|
public final class UserUpdater |
implements |
ConfigInit, |
UserModifiedListener, |
HttpSessionListener, |
HttpSessionActivationListener |
{ |
private static final Logger logger = Logger.getLogger(UserUpdater.class); |
|
protected Set sessions = new HashSet(); |
protected boolean registered = false; |
|
public UserUpdater() |
{ |
} |
|
public void init(Map params) |
{ |
register(); |
} |
|
protected void register() |
{ |
UserManager.getInstance().addModifiedListener(this); |
registered = true; |
|
logger.info("registered for user modifications"); |
} |
|
public void sessionCreated(HttpSessionEvent se) |
{ |
logger.info("session created"); |
sessions.add(se.getSession()); |
} |
|
public void sessionDestroyed(HttpSessionEvent se) |
{ |
if(logger.isInfoEnabled()) { |
logger.info("session destroyed for " + se.getSession().getAttribute(SessionKeys.USER)); |
} |
|
sessions.remove(se.getSession()); |
} |
|
public void sessionDidActivate(HttpSessionEvent se) |
{ |
if(logger.isInfoEnabled()) { |
logger.info("session activated for " + se.getSession().getAttribute(SessionKeys.USER)); |
} |
|
sessions.add(se.getSession()); |
} |
|
public void sessionWillPassivate(HttpSessionEvent se) |
{ |
if(logger.isInfoEnabled()) { |
logger.info("session passivated for " + se.getSession().getAttribute(SessionKeys.USER)); |
} |
|
sessions.remove(se.getSession()); |
} |
|
public void userModified(User editor, User user, User oldUser) |
throws ModelException |
{ |
logger.info("user modified: " + user); |
|
for(Iterator i = sessions.iterator(); i.hasNext(); ) { |
HttpSession s = (HttpSession)i.next(); |
User u = (User)s.getAttribute(SessionKeys.USER); |
|
if(u != null) { |
if(u.equals(oldUser)) { |
logger.info("update user"); |
s.setAttribute(SessionKeys.USER, user); |
s.setAttribute(Globals.LOCALE_KEY, user.getLocale()); |
} |
} |
} |
} |
} |