第十章 會話管理(六) sessionFactory
阿新 • • 發佈:2019-01-06
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中的相關程式碼。