package com.ots.framework.shiro.session; import com.ots.common.utils.IpUtils; import com.ots.common.utils.ServletUtils; import com.ots.common.utils.StringUtils; import com.ots.project.monitor.online.domain.OnlineSession; import com.ots.project.monitor.online.domain.UserOnline; import eu.bitwalker.useragentutils.UserAgent; import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.SessionContext; import org.apache.shiro.session.mgt.SessionFactory; import org.apache.shiro.web.session.mgt.WebSessionContext; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; @Component public class OnlineSessionFactory implements SessionFactory { public Session createSession(UserOnline userOnline) { OnlineSession onlineSession = userOnline.getSession(); if (StringUtils.isNotNull(onlineSession) && onlineSession.getId() == null) { onlineSession.setId(userOnline.getSessionId()); } return userOnline.getSession(); } @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) { UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); String os = userAgent.getOperatingSystem().getName(); String browser = userAgent.getBrowser().getName(); session.setHost(IpUtils.getIpAddr(request)); session.setBrowser(browser); session.setOs(os); } } return session; } }