package com.gkhy.exam.framework.manager.factory; import cn.hutool.extra.spring.SpringUtil; import com.gkhy.exam.common.constant.Constant; import com.gkhy.exam.common.utils.AddressUtils; import com.gkhy.exam.common.utils.IpUtils; import com.gkhy.exam.common.utils.LogUtils; import com.gkhy.exam.common.utils.ServletUtils; import com.gkhy.exam.system.domain.SysLogininfor; import com.gkhy.exam.system.domain.SysOperLog; import com.gkhy.exam.system.service.SysLogininforService; import com.gkhy.exam.system.service.SysOperLogService; import eu.bitwalker.useragentutils.UserAgent; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.util.TimerTask; @Slf4j public class AsyncFactory { public static TimerTask recordLoginInfo(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= IpUtils.getIpAddr(); 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)); // 打印信息到日志 log.info(s.toString(), args); // 获取客户端操作系统 String os = userAgent.getOperatingSystem().getName(); // 获取客户端浏览器 String browser = userAgent.getBrowser().getName(); // 封装对象 SysLogininfor logininfor = new SysLogininfor(); logininfor.setUserName(username); logininfor.setIpaddr(ip); logininfor.setLoginLocation(address); logininfor.setBrowser(browser); logininfor.setOs(os); logininfor.setMsg(message); // 日志状态 if (StringUtils.equalsAny(status, Constant.LOGIN_SUCCESS, Constant.LOGOUT, Constant.REGISTER)) { logininfor.setStatus(Constant.SUCCESS); } else if (Constant.LOGIN_FAIL.equals(status)) { logininfor.setStatus(Constant.FAIL); } // 插入数据 SpringUtil.getBean(SysLogininforService.class).insertLogininfor(logininfor); } }; } public static TimerTask recordOper(final SysOperLog operLog){ return new TimerTask() { @Override public void run() { operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); SpringUtil.getBean(SysOperLogService.class).insertOperlog(operLog); } }; } }