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