package com.landtool.lanbase.common.shiro;
|
|
import java.awt.Event;
|
import java.util.Collection;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import javax.annotation.PostConstruct;
|
import javax.servlet.ServletException;
|
import javax.servlet.annotation.WebListener;
|
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSessionAttributeListener;
|
import javax.servlet.http.HttpSessionBindingEvent;
|
import javax.servlet.http.HttpSessionEvent;
|
import javax.servlet.http.HttpSessionListener;
|
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.session.Session;
|
import org.apache.shiro.session.SessionListenerAdapter;
|
import org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler;
|
import org.apache.shiro.subject.SimplePrincipalCollection;
|
import org.apache.shiro.subject.support.DefaultSubjectContext;
|
import org.apache.shiro.util.ThreadContext;
|
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.connection.jedis.JedisUtils;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.context.WebApplicationContext;
|
import org.springframework.web.context.support.WebApplicationContextUtils;
|
|
import com.landtool.lanbase.common.utils.RedisUtils;
|
import com.landtool.lanbase.modules.sys.redis.OnlineUserRedis;
|
|
|
@Component
|
public class SessionWatcher extends SessionListenerAdapter {
|
// @Autowired
|
// private OnlineUserRedis onlineUserRedis;
|
|
|
|
@Autowired
|
private RedisUtils redisUtils;
|
|
private static RedisUtils redisUtil;
|
|
@PostConstruct
|
public void init() {
|
|
log.info("111");
|
redisUtil=redisUtils;
|
|
}
|
private Logger log= LoggerFactory.getLogger(SessionWatcher.class);
|
@Override
|
public void onStart(Session session){
|
session.setTimeout(1000*60*60);
|
log.info("一连接");
|
}
|
|
|
@Override
|
public void onExpiration(Session session){
|
|
log.info("失效");
|
cleanLogoutUser( session);
|
}
|
|
|
|
@Override
|
public void onStop(Session session){
|
|
log.info("停止");
|
cleanLogoutUser(session);
|
}
|
public void cleanLogoutUser(Session session){
|
|
if(redisUtil.exists("onlineuser")){
|
ConcurrentHashMap infos=redisUtil.get("onlineuser",ConcurrentHashMap.class );
|
infos.remove(session.getId().toString());
|
redisUtil.set("onlineuser", infos);
|
}
|
|
}
|
|
|
|
|
|
}
|