You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.7 KiB
101 lines
3.7 KiB
package com.ruoyi.framework.manager.factory; |
|
|
|
import java.util.TimerTask; |
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
import com.ruoyi.common.constant.Constants; |
|
import com.ruoyi.common.utils.LogUtils; |
|
import com.ruoyi.common.utils.ServletUtils; |
|
import com.ruoyi.common.utils.ip.AddressUtils; |
|
import com.ruoyi.common.utils.ip.IpUtils; |
|
import com.ruoyi.common.utils.spring.SpringUtils; |
|
import com.ruoyi.project.monitor.domain.SysLogininfor; |
|
import com.ruoyi.project.monitor.domain.SysOperLog; |
|
import com.ruoyi.project.monitor.service.ISysLogininforService; |
|
import com.ruoyi.project.monitor.service.ISysOperLogService; |
|
import eu.bitwalker.useragentutils.UserAgent; |
|
|
|
/** |
|
* 异步工厂(产生任务用) |
|
* |
|
* @author ruoyi |
|
*/ |
|
public class AsyncFactory |
|
{ |
|
private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); |
|
|
|
/** |
|
* 记录登陆信息 |
|
* |
|
* @param username 用户名 |
|
* @param status 状态 |
|
* @param message 消息 |
|
* @param args 列表 |
|
* @return 任务task |
|
*/ |
|
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 = IpUtils.getIpAddr(ServletUtils.getRequest()); |
|
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(); |
|
// 封装对象 |
|
SysLogininfor logininfor = new SysLogininfor(); |
|
logininfor.setUserName(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(ISysLogininforService.class).insertLogininfor(logininfor); |
|
} |
|
}; |
|
} |
|
|
|
/** |
|
* 操作日志记录 |
|
* |
|
* @param operLog 操作日志信息 |
|
* @return 任务task |
|
*/ |
|
public static TimerTask recordOper(final SysOperLog operLog) |
|
{ |
|
return new TimerTask() |
|
{ |
|
@Override |
|
public void run() |
|
{ |
|
// 远程查询操作地点 |
|
operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); |
|
SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); |
|
} |
|
}; |
|
} |
|
}
|
|
|