gaoluyang
8 天以前 44424d98fc4aa3bd4d4a177935b8908f01e27a23
src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
@@ -6,6 +6,7 @@
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.LogUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
@@ -13,6 +14,8 @@
import com.ruoyi.project.monitor.domain.SysOperLog;
import com.ruoyi.project.monitor.service.ISysLogininforService;
import com.ruoyi.project.monitor.service.ISysOperLogService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.service.ISysUserService;
import eu.bitwalker.useragentutils.UserAgent;
/**
@@ -25,7 +28,7 @@
    private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
    /**
     * 记录登陆信息
     * 记录登录信息
     * 
     * @param username 用户名
     * @param status 状态
@@ -37,17 +40,19 @@
            final Object... args)
    {
        final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
        final String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
        final String ip = IpUtils.getIpAddr();
        return new TimerTask()
        {
            @Override
            public void run()
            {
                // 登录日志用户名称记录昵称,昵称为空时回退登录账号
                String displayName = resolveNickName(username);
                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(displayName));
                s.append(LogUtils.getBlock(status));
                s.append(LogUtils.getBlock(message));
                // 打印信息到日志
@@ -58,14 +63,14 @@
                String browser = userAgent.getBrowser().getName();
                // 封装对象
                SysLogininfor logininfor = new SysLogininfor();
                logininfor.setUserName(username);
                logininfor.setUserName(displayName);
                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))
                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
                {
                    logininfor.setStatus(Constants.SUCCESS);
                }
@@ -80,8 +85,35 @@
    }
    /**
     * 按登录账号查询昵称,查询不到时回退为原账号
     *
     * @param username 登录账号
     * @return 昵称
     */
    private static String resolveNickName(String username)
    {
        if (StringUtils.isEmpty(username))
        {
            return username;
        }
        try
        {
            SysUser user = SpringUtils.getBean(ISysUserService.class).selectUserByUserName(username);
            if (user != null && StringUtils.isNotEmpty(user.getNickName()))
            {
                return user.getNickName();
            }
        }
        catch (Exception e)
        {
            // 查询昵称失败不影响登录日志写入,回退为登录账号
        }
        return username;
    }
    /**
     * 操作日志记录
     *
     *
     * @param operLog 操作日志信息
     * @return 任务task
     */