package com.landtool.lanbase.modules.sys.redis; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; import javax.annotation.Resource; import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.eis.MemorySessionDAO; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.support.DefaultSubjectContext; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.landtool.lanbase.common.shiro.ShiroToken; import com.landtool.lanbase.common.utils.RedisUtils; import com.landtool.lanbase.common.utils.ShiroUtils; import com.landtool.lanbase.modules.log.entity.LogAction; import com.landtool.lanbase.modules.log.service.LogActionService; /** * redis人员在线 * @author zsx * */ @Component public class OnlineUserRedis { private static final String NAME = "onlineuser"; @Autowired private RedisUtils redisUtils; @Autowired private LogActionService logservice; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // /** // * 从session中获取记录的验证码 // */ // private Session getSessionByUsername(String username) { // DefaultWebSecurityManager securityManager=(DefaultWebSecurityManager) SecurityUtils.getSecurityManager(); // DefaultWebSessionManager sessionManager=(DefaultWebSessionManager) securityManager.getSessionManager(); // Collection sessions=sessionManager.getSessionDAO().getActiveSessions(); // Object attribute; // String user; // Session ses = null; // for(Session session:sessions){ // attribute=session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); // user=((SimplePrincipalCollection) attribute).toString(); // if(user.equals(username)){ // ses=session; // session.stop(); // break; // // } // } // return ses; // } // // public void removeDownlineUser(){ // // // if(redisUtils.exists(NAME)){ // ConcurrentHashMap infos=redisUtils.get(NAME,ConcurrentHashMap.class ); // Iterator it= infos.keySet().iterator(); // while(it.hasNext()){ // Object key= it.next(); // String sessioninfo= (String) infos.get(key); // JSONObject json=JSON.parseObject(sessioninfo); // Double temp=json.getDouble("time"); // //这里与用户最后一次操作时间进行判断 // Map map=new HashMap<>(); // map.put("UserName", json.getString("username")); // map.put("appid", 1); // map.put("lowerOffset", 0); // map.put("limit", 1); // List list= logservice.queryList(map); // if(list!=null&!list.isEmpty()){ // if((System.currentTimeMillis()-list.get(0).getDodate().getTime())>10*1000 && // (System.currentTimeMillis()-temp)>10*1000 ){ // infos.remove(key); // // } // } // } // redisUtils.set(NAME, infos); // } // } public void saveOnlineUser(String username,Session session){ if(redisUtils.exists("onlineuser")){ ConcurrentHashMap infos=redisUtils.get("onlineuser",ConcurrentHashMap.class ); JSONObject json=new JSONObject(); json.put("time", new Long(System.currentTimeMillis())); json.put("username",username); infos.put(session.getId().toString(), json.toJSONString()); redisUtils.set("onlineuser", infos); }else{ ConcurrentHashMap onlineuser=new ConcurrentHashMap(); JSONObject json=new JSONObject(); json.put("time", new Long(System.currentTimeMillis())); json.put("username",username); onlineuser.put(session.getId().toString(), json.toJSONString()); redisUtils.set("onlineuser", onlineuser); } } public void cleanLogoutUser(Session session){ if(redisUtils.exists("onlineuser")){ ConcurrentHashMap infos=redisUtils.get("onlineuser",ConcurrentHashMap.class ); infos.remove(session.getId().toString()); redisUtils.set("onlineuser", infos); } } }