package com.ots.framework.manager.factory; import com.ots.common.constant.Constants; import com.ots.common.utils.AddressUtils; import com.ots.common.utils.LogUtils; import com.ots.common.utils.ServletUtils; import com.ots.common.utils.security.ShiroUtils; import com.ots.common.utils.spring.SpringUtils; import com.ots.project.monitor.logininfor.domain.Logininfor; import com.ots.project.monitor.logininfor.service.LogininforServiceImpl; import com.ots.project.monitor.online.domain.OnlineSession; import com.ots.project.monitor.online.domain.UserOnline; import com.ots.project.monitor.online.service.IUserOnlineService; import com.ots.project.monitor.operlog.domain.OperLog; import com.ots.project.monitor.operlog.service.IOperLogService; import eu.bitwalker.useragentutils.UserAgent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.TimerTask; public class AsyncFactory { private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); public static TimerTask syncSessionToDb(final OnlineSession session) { return new TimerTask() { @Override public void run() { UserOnline online = new UserOnline(); online.setSessionId(String.valueOf(session.getId())); online.setDeptName(session.getDeptName()); online.setLoginName(session.getLoginName()); online.setStartTimestamp(session.getStartTimestamp()); online.setLastAccessTime(session.getLastAccessTime()); online.setExpireTime(session.getTimeout()); online.setIpaddr(session.getHost()); online.setLoginLocation(AddressUtils.getRealAddressByIP(session.getHost())); online.setBrowser(session.getBrowser()); online.setOs(session.getOs()); online.setStatus(session.getStatus()); online.setSession(session); SpringUtils.getBean(IUserOnlineService.class).saveOnline(online); } }; } public static TimerTask recordOper(final OperLog operLog) { return new TimerTask() { @Override public void run() { operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); SpringUtils.getBean(IOperLogService.class).insertOperlog(operLog); } }; } public static TimerTask recordLogininfor(final String username, final String status, final String message, final Object... args) { final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); final String ip = ShiroUtils.getIp(); return new TimerTask() { @Override public void run() { String address = AddressUtils.getRealAddressByIP(ip); StringBuilder s = new StringBuilder(); s.append(LogUtils.getBlock(ip)); s.append(address); s.append(LogUtils.getBlock(username)); s.append(LogUtils.getBlock(status)); s.append(LogUtils.getBlock(message)); sys_user_logger.info(s.toString(), args); String os = userAgent.getOperatingSystem().getName(); String browser = userAgent.getBrowser().getName(); Logininfor logininfor = new Logininfor(); logininfor.setLoginName(username); logininfor.setIpaddr(ip); logininfor.setLoginLocation(address); logininfor.setBrowser(browser); logininfor.setOs(os); logininfor.setMsg(message); if (Constants.LOGIN_SUCCESS.equals(status) || Constants.LOGOUT.equals(status)) { logininfor.setStatus(Constants.SUCCESS); } else if (Constants.LOGIN_FAIL.equals(status)) { logininfor.setStatus(Constants.FAIL); } SpringUtils.getBean(LogininforServiceImpl.class).insertLogininfor(logininfor); } }; } }