package com.stone.conf.session; import com.stone.conf.redis.RedisHelper; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.session.Session; import org.apache.shiro.session.SessionListener; import java.util.concurrent.atomic.AtomicInteger; /** * shiro session监听 * * @author zhoujl * @date 2019-09-17 */ @Slf4j public class ShiroSessionListener implements SessionListener { /** * 统计在线人数 */ private final AtomicInteger sessionCount = new AtomicInteger(0); /** * 会话创建时触发 */ @Override public void onStart(Session session) { log.info("会话创建:" + session.getId()); // 会话创建,在线人数加一 sessionCount.incrementAndGet(); } /** * 退出会话时触发 */ @Override public void onStop(Session session) { log.info("会话退出:" + session.getId()); // 会话退出,在线人数减一 sessionCount.decrementAndGet(); } /** * 会话过期时触发 */ @Override public void onExpiration(Session session) { log.info("会话过期:" + session.getId()); // 会话过期,在线人数减一 sessionCount.decrementAndGet(); RedisHelper.delKey(session.getId() + ""); } /** * 获取在线人数使用 * @return 在线人数 */ public AtomicInteger getSessionCount() { return sessionCount; } }