package cc.mrbird.febs.monitor.entity; import cc.mrbird.febs.common.converter.TimeConverter; import cc.mrbird.febs.common.utils.HttpContextUtil; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.wuwenze.poi.annotation.Excel; import com.wuwenze.poi.annotation.ExcelField; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Date; /** * @author MrBird */ @Slf4j @Data @TableName("t_login_log") @Excel("登录日志") public class LoginLog implements Serializable { private static final long serialVersionUID = 921991157363932095L; /** * id */ @TableId(value = "ID", type = IdType.AUTO) private Long id; /** * 登录用户 */ @TableField("USERNAME") @ExcelField("登录用户") private String username; /** * 登录时间 */ @TableField("LOGIN_TIME") @ExcelField(value = "登录时间", writeConverter = TimeConverter.class) private Date loginTime; /** * 登录地点 */ @TableField("LOCATION") @ExcelField(value = "登录地点") private String location; /** * 登录 IP */ @TableField("IP") @ExcelField("登录IP") private String ip; /** * 操作系统 */ @TableField("`SYSTEM`") @ExcelField("操作系统") private String system; /** * 登录浏览器 */ @TableField("BROWSER") @ExcelField("登录浏览器") private String browser; private transient String loginTimeFrom; private transient String loginTimeTo; public void setSystemBrowserInfo() { try { HttpServletRequest request = HttpContextUtil.getHttpServletRequest(); StringBuilder userAgent = new StringBuilder("["); userAgent.append(request.getHeader("User-Agent")); userAgent.append("]"); int indexOfMac = userAgent.indexOf("Mac OS X"); int indexOfWindows = userAgent.indexOf("Windows NT"); int indexOfIe = userAgent.indexOf("MSIE"); int indexOfIe11 = userAgent.indexOf("rv:"); int indexOfFirefox = userAgent.indexOf("Firefox"); int indexOfSogou = userAgent.indexOf("MetaSr"); int indexOfChrome = userAgent.indexOf("Chrome"); int indexOfSafari = userAgent.indexOf("Safari"); boolean isMac = indexOfMac > 0; boolean isWindows = indexOfWindows > 0; boolean isLinux = userAgent.indexOf("Linux") > 0; boolean containIe = indexOfIe > 0 || (isWindows && (indexOfIe11 > 0)); boolean containFirefox = indexOfFirefox > 0; boolean containSogou = indexOfSogou > 0; boolean containChrome = indexOfChrome > 0; boolean containSafari = indexOfSafari > 0; String browser = ""; if (containSogou) { if (containIe) { browser = "搜狗" + userAgent.substring(indexOfIe, indexOfIe + "IE x.x".length()); } else if (containChrome) { browser = "搜狗" + userAgent.substring(indexOfChrome, indexOfChrome + "Chrome/xx".length()); } } else if (containChrome) { browser = userAgent.substring(indexOfChrome, indexOfChrome + "Chrome/xx".length()); } else if (containSafari) { int indexOfSafariVersion = userAgent.indexOf("Version"); browser = "Safari " + userAgent.substring(indexOfSafariVersion, indexOfSafariVersion + "Version/x.x.x.x".length()); } else if (containFirefox) { browser = userAgent.substring(indexOfFirefox, indexOfFirefox + "Firefox/xx".length()); } else if (containIe) { if (indexOfIe11 > 0) { browser = "IE 11"; } else { browser = userAgent.substring(indexOfIe, indexOfIe + "IE x.x".length()); } } String os = ""; if (isMac) { os = userAgent.substring(indexOfMac, indexOfMac + "MacOS X xxxxxxxx".length()); } else if (isLinux) { os = "Linux"; } else if (isWindows) { os = "Windows "; String version = userAgent.substring(indexOfWindows + "Windows NT".length(), indexOfWindows + "Windows NTx.x".length()); switch (version.trim()) { case "5.0": os += "2000"; break; case "5.1": os += "XP"; break; case "5.2": os += "2003"; break; case "6.0": os += "Vista"; break; case "6.1": os += "7"; break; case "6.2": os += "8"; break; case "6.3": os += "8.1"; break; case "10": os += "10"; default: break; } } this.system = os; this.browser = StringUtils.replace(browser, "/", " "); } catch (Exception e) { log.error("获取登录信息失败:{}", e.getMessage()); this.system = ""; this.browser = ""; } } }