From 34d18c08f04de78eccb42b88b7484b0531d263ff Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期一, 12 八月 2024 20:13:19 +0800 Subject: [PATCH] 新增加系统管理部分功能接口 --- ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java | 162 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 124 insertions(+), 38 deletions(-) diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java index 7ca0f00..c4230d8 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysRecordLogService.java @@ -1,48 +1,134 @@ package com.ruoyi.auth.service; -import org.springframework.beans.factory.annotation.Autowired; +import com.ruoyi.system.api.feignClient.SysLoginLogClient; +import com.ruoyi.system.domain.SysLoginLog; import org.springframework.stereotype.Component; -import com.ruoyi.common.core.constant.Constants; -import com.ruoyi.common.core.constant.SecurityConstants; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.ip.IpUtils; -import com.ruoyi.system.api.RemoteLogService; -import com.ruoyi.system.api.domain.SysLogininfor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; /** * 记录日志方法 - * + * * @author ruoyi */ @Component -public class SysRecordLogService -{ - @Autowired - private RemoteLogService remoteLogService; - - /** - * 记录登录信息 - * - * @param username 用户名 - * @param status 状态 - * @param message 消息内容 - * @return - */ - public void recordLogininfor(String username, String status, String message) - { - SysLogininfor logininfor = new SysLogininfor(); - logininfor.setUserName(username); - logininfor.setIpaddr(IpUtils.getIpAddr()); - logininfor.setMsg(message); - // 日志状态 - if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) - { - logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS); - } - else if (Constants.LOGIN_FAIL.equals(status)) - { - logininfor.setStatus(Constants.LOGIN_FAIL_STATUS); - } - remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); - } +public class SysRecordLogService { + @Resource + private SysLoginLogClient sysLoginLogClient; + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息内容 + * @return + */ + public void recordLogininfor(HttpServletRequest request, Integer userId, String username, String status, String message) { + Map<String, String> headerData = getHeaderData(request); + //添加登录日志 + SysLoginLog loginLog = new SysLoginLog(); + loginLog.setUserId(userId); + loginLog.setUsername(username); + loginLog.setIpAddress(headerData.get("ip")); + loginLog.setAddress("");// todo 待完善 https://www.juhe.cn/docs/api/id/1 + loginLog.setBrowserType(headerData.get("browser")); + loginLog.setOperatingSystem(headerData.get("os")); + loginLog.setLoginTime(LocalDateTime.now()); + loginLog.setLoginStatus(Integer.valueOf(status)); + loginLog.setMessage(message); + sysLoginLogClient.saveLoginLog(loginLog); + } + + + public Map<String, String> getHeaderData(HttpServletRequest request) { + //Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 + String browserDetails = request.getHeader("User-Agent"); + String userAgent = browserDetails; + String user = userAgent.toLowerCase(); + Map<String, String> map = new HashMap<>(); + String os = ""; + String browser = ""; + if (userAgent.toLowerCase().indexOf("windows") >= 0) { + os = "Windows"; + } else if (userAgent.toLowerCase().indexOf("mac") >= 0) { + os = "Mac"; + } else if (userAgent.toLowerCase().indexOf("x11") >= 0) { + os = "Unix"; + } else if (userAgent.toLowerCase().indexOf("android") >= 0) { + os = "Android"; + } else if (userAgent.toLowerCase().indexOf("iphone") >= 0) { + os = "IPhone"; + } else { + os = "UnKnown, More-Info: " + userAgent; + } + if (user.contains("edge")) { + browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-"); + } else if (user.contains("msie")) { + String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0]; + browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1]; + } else if (user.contains("safari") && user.contains("version")) { + browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0] + + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; + } else if (user.contains("opr") || user.contains("opera")) { + if (user.contains("opera")) { + browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0] + + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; + } else if (user.contains("opr")) { + browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")) + .replace("OPR", "Opera"); + } + + } else if (user.contains("chrome")) { + browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); + } else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) || + (user.indexOf("mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) || + (user.indexOf("mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1)) { + browser = "Netscape-?"; + + } else if (user.contains("firefox")) { + browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); + } else if (user.contains("rv")) { + String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-"); + browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1); + } else { + browser = "UnKnown, More-Info: " + userAgent; + } + + String ip = request.getHeader("x-forwarded-for"); + if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { + // 多次反向代理后会有多个ip值,第一个ip才是真实ip + if (ip.indexOf(",") != -1) { + ip = ip.split(",")[0]; + } + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + map.put("os", os); + map.put("browser", browser); + map.put("ip", ip); + return map; + } + + } -- Gitblit v1.7.1