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<Session> 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<String,Object> map=new HashMap<>();
|
// map.put("UserName", json.getString("username"));
|
// map.put("appid", 1);
|
// map.put("lowerOffset", 0);
|
// map.put("limit", 1);
|
// List<LogAction> 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<String,Object> 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<String,Object> onlineuser=new ConcurrentHashMap<String,Object>();
|
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);
|
}
|
|
}
|
|
|
}
|