| 1 25 29 package org.jresearch.gossip.listeners; 30 31 import java.sql.SQLException ; 32 33 import javax.servlet.ServletContext ; 34 import javax.servlet.http.HttpSession ; 35 import javax.servlet.http.HttpSessionAttributeListener ; 36 import javax.servlet.http.HttpSessionBindingEvent ; 37 38 import org.apache.struts.Globals; 39 import org.apache.struts.util.MessageResources; 40 import org.jresearch.gossip.IConst; 41 import org.jresearch.gossip.am.PermissionGuardFactory; 42 import org.jresearch.gossip.beans.user.Entry; 43 import org.jresearch.gossip.beans.user.User; 44 import org.jresearch.gossip.configuration.Configurator; 45 import org.jresearch.gossip.constants.UserStatus; 46 import org.jresearch.gossip.dao.ForumDAO; 47 import org.jresearch.gossip.dao.UserDAO; 48 import org.jresearch.gossip.exception.ConfiguratorException; 49 import org.jresearch.gossip.exception.SystemException; 50 import org.jresearch.gossip.log.LogLevel; 51 import org.jresearch.gossip.log.avalon.JGossipLog; 52 53 58 public class UserWatcher implements HttpSessionAttributeListener { 59 60 65 private Entry getCurrentEntry(HttpSessionBindingEvent evt) { 66 User user = (User) evt.getSession().getAttribute( 67 IConst.SESSION.USER_KEY); 68 Entry entry = new Entry(user.getName(), evt.getSession().getId(), user 69 .getIp()); 70 71 return entry; 72 } 73 74 80 public void attributeAdded(HttpSessionBindingEvent evt) { 81 if (evt.getName().equals(IConst.SESSION.USER_KEY)) { 82 HttpSession session = evt.getSession(); 83 cleanUpPermissions(session); 84 ServletContext app = session.getServletContext(); 85 ForumDAO forumdao = ForumDAO.getInstance(); 86 User user = (User) evt.getSession().getAttribute( 87 IConst.SESSION.USER_KEY); 88 89 try { 90 savePermissionGuard(session); 91 if (user.getStatus() > 0) { 92 forumdao.removeEntry(user.getName()); 93 } 94 95 forumdao.addEntry(getCurrentEntry(evt)); 96 97 JGossipLog.audit(LogLevel.INFO, user, ((MessageResources) app 99 .getAttribute(Globals.MESSAGES_KEY 100 + Configurator.getInstance().get( 101 IConst.CONFIG.MODULE_PREFIX))) 102 .getMessage("logs.LOG1"), session); 103 } catch (SQLException sqle) { 104 sqle.printStackTrace(); 105 } catch (SystemException e) { 106 e.printStackTrace(); 107 } 108 109 app.log("UserWatcher: User bean is added with login=" 110 + user.getName()); 111 } 112 } 113 114 119 public void attributeRemoved(HttpSessionBindingEvent evt) { 120 if (evt.getName().equals(IConst.SESSION.USER_KEY)) { 121 HttpSession session = evt.getSession(); 122 try { 123 cleanUpPermissions(session); 124 } catch (IllegalStateException e) { 125 126 } 127 128 ServletContext app = session.getServletContext(); 129 130 User user = (User) evt.getValue(); 131 132 UserDAO dao = UserDAO.getInstance(); 133 ForumDAO forumdao = ForumDAO.getInstance(); 134 135 try { 136 forumdao.removeEntry(session.getId()); 137 138 if (user.getStatus() != UserStatus.GUEST) { 139 dao.updateIntime(user.getName()); 140 } 141 JGossipLog.audit(LogLevel.INFO, user, ((MessageResources) app 143 .getAttribute(Globals.MESSAGES_KEY 144 + Configurator.getInstance().get( 145 IConst.CONFIG.MODULE_PREFIX))) 146 .getMessage("logs.LOG23"), session); 147 } catch (SQLException sqle) { 148 sqle.printStackTrace(); 149 } catch (ConfiguratorException e) { 150 e.printStackTrace(); 151 } 152 153 app.log("UserWatcher: User bean with login=" + user.getName() 154 + " is removed"); 155 } 156 } 157 158 163 public void attributeReplaced(HttpSessionBindingEvent evt) { 164 if (evt.getName().equals(IConst.SESSION.USER_KEY)) { 165 HttpSession session = evt.getSession(); 166 cleanUpPermissions(session); 167 ServletContext app = session.getServletContext(); 168 169 ForumDAO forumdao = ForumDAO.getInstance(); 170 User user = (User) evt.getSession().getAttribute( 171 IConst.SESSION.USER_KEY); 172 173 try { 174 175 if (user.getStatus() > 0) { 176 forumdao.removeEntry(user.getName()); 177 } 178 179 if (!forumdao.isEntryExist(session.getId())) { 180 forumdao.addEntry(getCurrentEntry(evt)); 181 } else { 182 forumdao.updateEntry(getCurrentEntry(evt)); 183 } 184 savePermissionGuard(session); 185 } catch (SQLException sqle) { 186 sqle.printStackTrace(); 187 } catch (SystemException e) { 188 e.printStackTrace(); 189 } 190 191 app.log("UserWatcher: User bean is replaced, new login=" 192 + user.getName()); 193 } 194 } 195 196 private void savePermissionGuard(HttpSession session) 197 throws SystemException { 198 User user = (User) session.getAttribute(IConst.SESSION.USER_KEY); 199 if (user.getStatus() == UserStatus.GUEST 200 || (user.getInfo().getEmail() != null)) { 201 session.setAttribute(IConst.SESSION.PERMISSION_GUARD_KEY, 202 PermissionGuardFactory.getInstance().createGuard( 203 user.getName())); 204 } else if (Configurator.getInstance().getBoolean( 205 IConst.CONFIG.ENABLE_EXT_SIGN_ON)) { 206 session.setAttribute(IConst.SESSION.PERMISSION_GUARD_KEY, 207 PermissionGuardFactory.getInstance().createGuard( 208 user.getStatus())); 209 } 210 } 211 212 private void cleanUpPermissions(HttpSession session) { 213 session.removeAttribute(IConst.SESSION.PERMISSION_GUARD_KEY); 214 } 215 } | Popular Tags |