You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

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;
}
}