** * 监听在线用户上线下线 */ public class OnlineListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, HttpSessionBindingListener, ServletRequestListener, ServletRequestAttributeListener { private static ApplicationContext ctx = null; private static HttpServletRequest req = null; public OnlineListener() { } public void requestDestroyed(ServletRequestEvent arg0) { } /** * 向session里增加 user_session属性时调用 */ @Override public void attributeAdded(HttpSessionBindingEvent evt) { String name = evt.getName(); if (Globals.USER_SESSION.equals(name)) {// 如果存入的属性是user_session HttpSession session = evt.getSession(); SessionInfo sessionInfo = (SessionInfo) session.getAttribute(name); if (sessionInfo != null) { SystemService systemService = (SystemService) ctx.getBean("systemService"); systemService.addOnline(IpUtil.getIpAddr(req), sessionInfo.getUser()); } } } /** * 服务器初始化 */ public void contextInitialized(ServletContextEvent evt) { ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext()); } public void sessionDidActivate(HttpSessionEvent arg0) { } public void valueBound(HttpSessionBindingEvent arg0) { } public void attributeAdded(ServletContextAttributeEvent arg0) { } public void attributeRemoved(ServletContextAttributeEvent arg0) { } /** * session销毁 */ @Override public void sessionDestroyed(HttpSessionEvent evt) { HttpSession session = evt.getSession(); if (session != null) { SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION); if (sessionInfo != null) { SystemService systemService = (SystemService) ctx.getBean("systemService"); systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser()); } } } @Override public void attributeRemoved(HttpSessionBindingEvent evt) { HttpSession session = evt.getSession(); if (session != null) { SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION); if (sessionInfo != null) { SystemService systemService = (SystemService) ctx.getBean("systemService"); systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser()); } } } public void attributeAdded(ServletRequestAttributeEvent evt) { } @Override public void valueUnbound(HttpSessionBindingEvent evt) { HttpSession session = evt.getSession(); if (session != null) { SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION); if (sessionInfo != null) { SystemService systemService = (SystemService) ctx.getBean("systemService"); systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser()); } } } public void sessionWillPassivate(HttpSessionEvent arg0) { } public void sessionCreated(HttpSessionEvent arg0) { } public void attributeReplaced(HttpSessionBindingEvent arg0) { } public void attributeReplaced(ServletContextAttributeEvent arg0) { } public void attributeRemoved(ServletRequestAttributeEvent arg0) { } public void contextDestroyed(ServletContextEvent evt) { } public void attributeReplaced(ServletRequestAttributeEvent arg0) { } /** * 服务器初始化 */ public void requestInitialized(ServletRequestEvent evt) { req = (HttpServletRequest)evt.getServletRequest(); } }
增强方法:
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import jeecg.system.manager.ClientManager; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** * 监听在线用户上线下线 */ public class OnlineListener implements ServletContextListener,HttpSessionListener { private static ApplicationContext ctx = null; public OnlineListener() { } @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ClientManager.getInstance().removeClinet(httpSessionEvent.getSession().getId()); } /** * 服务器初始化 */ @Override public void contextInitialized(ServletContextEvent evt) { ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext()); } public static ApplicationContext getCtx() { return ctx; } @Override public void contextDestroyed(ServletContextEvent paramServletContextEvent) { } }
import java.util.Collection; import java.util.HashMap; import java.util.Map; import jeecg.system.pojo.base.Client; /** * 对在线用户的管理 */ public class ClientManager { private static ClientManager instance = new ClientManager(); private ClientManager(){ } public static ClientManager getInstance(){ return instance; } private Map<String,Client> map = new HashMap<String, Client>(); /** * * @param sessionId * @param client */ public void addClinet(String sessionId,Client client){ map.put(sessionId, client); } /** * sessionId */ public void removeClinet(String sessionId){ map.remove(sessionId); } /** * * @param sessionId * @return */ public Client getClient(String sessionId){ return map.get(sessionId); } /** * * @return */ public Collection<Client> getAllClient(){ return map.values(); } }
import java.util.Map; /** * 在线用户对象 * */ public class Client implements java.io.Serializable { private static final long serialVersionUID = 1L; private TSUser user; private Map<String, TSFunction> functions; /** * 用户IP */ private java.lang.String ip; /** *登录时间 */ private java.util.Date logindatetime; public TSUser getUser() { return user; } public void setUser(TSUser user) { this.user = user; } public Map<String, TSFunction> getFunctions() { return functions; } public void setFunctions(Map<String, TSFunction> functions) { this.functions = functions; } public java.lang.String getIp() { return ip; } public void setIp(java.lang.String ip) { this.ip = ip; } public java.util.Date getLogindatetime() { return logindatetime; } public void setLogindatetime(java.util.Date logindatetime) { this.logindatetime = logindatetime; } }
import javax.persistence.Column; /** * 系统用户表 * */ public class TSUser extends TSBaseUser implements java.io.Serializable { private static final long serialVersionUID = 1L; private String signatureFile;// 签名文件 private String mobilePhone;// 手机 private String officePhone;// 办公电话 private String email;// 邮箱 @Column(name = "signatureFile", length = 100) public String getSignatureFile() { return this.signatureFile; } public void setSignatureFile(String signatureFile) { this.signatureFile = signatureFile; } @Column(name = "mobilePhone", length = 30) public String getMobilePhone() { return this.mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; } @Column(name = "officePhone", length = 20) public String getOfficePhone() { return this.officePhone; } public void setOfficePhone(String officePhone) { this.officePhone = officePhone; } @Column(name = "email", length = 50) public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } }
在线用户的添加: Client client = new Client(); client.setIp(IpUtil.getIpAddr(req)); client.setLogindatetime(new Date()); client.setUser(u); ClientManager.getInstance().addClinet(session.getId(),client);