获取当前系统的在线用户数

1 篇文章 0 订阅

目前大部分系统都会显示当前系统的在线用户信息,本人做了一个拦截器实现

1、定义拦截器 拦截 session失效
2、用户登录把用户信息保存在内存(map《sessionID,user》)
1、定于拦截器类

/**
 * 监听在线用户上线下线  add by lizw
 */
public class OnlineListener implements ServletContextListener,HttpSessionListener {

 private static ApplicationContext ctx = null;

 public OnlineListener() {
 }

 
 public void sessionCreated(HttpSessionEvent httpSessionEvent) {
 }

 
 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    //
      ClientManager.getInstance().removeClinet(httpSessionEvent.getSession().getId());
 }

 /**
  * 服务器初始化
  */
 
 public void contextInitialized(ServletContextEvent evt) {
  ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext());
 }

 public static ApplicationContext getCtx() {
  return ctx;
 }
 
 
 public void contextDestroyed(ServletContextEvent paramServletContextEvent) {
 
 }

}
2、web.xml添加拦截

<!-- 在线用户监听器 add by lizw -->
 <listener>
  <listener-class>org.jeecgframework.web.system.listener.OnlineListener</listener-class>
 </listener>

3、登录的时候保存
 Client client = new Client();
        client.setIp(IpUtil.getIpAddr(req));
        client.setLogindatetime(new Date());
        client.setUser(user);
        ClientManager.getInstance().addClinet(session.getId(), client);

对在线用户的管理
/**
 * 对在线用户的管理
 * @author lizw
 * @date 2013-9-28
 * @version 1.0
 */
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 Client getClient(){
  return map.get(ContextHolderUtils.getSession().getId());
 }
 /**
  *
  * @return
  */
 public Collection<Client> getAllClient(){
  return map.values();
 }

}

在线用户对象
/**
 * 在线用户对象
 *
 * @author lizw
 * @date 2013-9-28
 * @version 1.0
 */
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;
 }


}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值