第十章 会话管理(六) sessionFactory

本文介绍如何在Apache Shiro框架中自定义Session及SessionFactory,实现用户在线状态的管理和控制,包括创建自定义的OnlineSession类和OnlineSessionFactory类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sessionFactory 是创建会话的工厂,根据相应的Subject 上下文信息来创建会话;默认提供了SimpleSessionFactory用来创建SimpleSession会话。


首先自定义一个Session:

public class OnlineSession extends SimpleSession {
public static enum OnlineStatus {
on_line("在线"), hidden("隐身"), force_logout("强制退出");
private final String info;
private OnlineStatus(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
}
private String userAgent; //用户浏览器类型
private OnlineStatus status = OnlineStatus.on_line; //在线状态
private String systemHost; //用户登录时系统IP
//省略其他
}

OnlineSession 用于保存当前登录用户的在线状态,支持如离线等状态的控制。

接着自定义SessionFactory:

public class OnlineSessionFactory implements SessionFactory {
@Override
public Session createSession(SessionContext initData) {
OnlineSession session = new OnlineSession();
if (initData != null && initData instanceof WebSessionContext) {
WebSessionContext sessionContext = (WebSessionContext) initData;
HttpServletRequest request = (HttpServletRequest)
sessionContext.getServletRequest();
if (request != null) {
session.setHost(IpUtils.getIpAddr(request));
session.setUserAgent(request.getHeader("User-Agent"));
session.setSystemHost(request.getLocalAddr() + ":" +
request.getLocalPort());
}
}
return session;
}
}

根据会话上下文创建相应的OnlineSession。

最后在shiro-web.ini配置文件中配置:

sessionFactory=org.apache.shiro.session.mgt.OnlineSessionFactory
sessionManager.sessionFactory=$sessionFactory

更多请参考https://github.com/zhangkaitao/es/tree/master/web/src/main/java/org/apache/shiro中的相关代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值