瀏覽代碼

日志管理-记录

caozixuan 2 年之前
父節點
當前提交
1298c679be

+ 9 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -25,6 +25,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.SystemEnum;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.FileUtil;
@@ -108,6 +109,9 @@ public class SysController {
     @Resource
     AuthInfoService authInfoService;
 
+    @Resource
+    BasicOperationLogService basicOperationLogService;
+
     /**
      * 登录
      *
@@ -118,7 +122,6 @@ public class SysController {
     @RequestMapping(value = "/login", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
     @Aac(auth = BOOL.FALSE)
-    @OperationLogDetail(detail = "用户登录",customizedOperationType = CustomizedOperationTypeEnum.LOGIN)
     public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody LoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
@@ -235,7 +238,11 @@ public class SysController {
         }
         SysUser sysUser = userList.get(0);
         LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
-
+        try {
+            basicOperationLogService.saveOperateLogWithNoAuth(sysUser.getSchoolId(), sysUser.getId(), "用户登录", CustomizedOperationTypeEnum.LOGIN, SystemEnum.DISTRIBUTED_PRINT);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+        }
         return ResultUtil.ok(loginResult);
     }
 

+ 4 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicOperationLogService.java

@@ -2,10 +2,12 @@ package com.qmth.teachcloud.common.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.result.BasicOperationLogResult;
 import com.qmth.teachcloud.common.entity.BasicOperationLog;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.SystemEnum;
 
 /**
  * @Description: 操作日志记录服务类
@@ -26,4 +28,6 @@ public interface BasicOperationLogService extends IService<BasicOperationLog> {
      * @return 分页结果
      */
     IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, SysUser requestUser, int pageNumber, int pageSize);
+
+    void saveOperateLogWithNoAuth(Long schoolId,Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType);
 }

+ 32 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicOperationLogServiceImpl.java

@@ -4,13 +4,21 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.result.BasicOperationLogResult;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicOperationLog;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.enums.log.SystemEnum;
 import com.qmth.teachcloud.common.mapper.BasicOperationLogMapper;
 import com.qmth.teachcloud.common.service.BasicOperationLogService;
+import com.qmth.teachcloud.common.service.SysUserService;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
 /**
  * @Description: 基础操作日志服务实现类
  * @Author: CaoZixuan
@@ -18,11 +26,34 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class BasicOperationLogServiceImpl extends ServiceImpl<BasicOperationLogMapper, BasicOperationLog> implements BasicOperationLogService {
+    @Resource
+    private SysUserService sysUserService;
 
     @Override
     public IPage<BasicOperationLogResult> findOperationLogPage(CustomizedOperationTypeEnum customizedOperationType, Long startTime, Long endTime, SysUser requestUser, int pageNumber, int pageSize) {
         Long schoolId = requestUser.getSchoolId();
         Long userId = requestUser.getId();
-        return this.baseMapper.findOperationLogPage(new Page<>(pageNumber,pageSize),schoolId,userId,customizedOperationType,startTime,endTime);
+        return this.baseMapper.findOperationLogPage(new Page<>(pageNumber, pageSize), schoolId, userId, customizedOperationType, startTime, endTime);
+    }
+
+    @Override
+    public void saveOperateLogWithNoAuth(Long schoolId, Long userId, String detail, CustomizedOperationTypeEnum customizedOperationType, SystemEnum systemType) {
+        HttpServletRequest request = ServletUtil.getRequest();
+        BasicOperationLog operationLog = new BasicOperationLog();
+        operationLog.setId(SystemConstant.getDbUuid());
+        operationLog.setDetail(detail);
+        operationLog.setSchoolId(schoolId);
+        operationLog.setUrl(request.getServletPath());
+        operationLog.setUserId(userId);
+        operationLog.setCustomizedOperationType(customizedOperationType);
+
+        SysUser requestUser = sysUserService.getById(userId);
+        if (Objects.nonNull(requestUser)) {
+            operationLog.setUserName(requestUser.getRealName());
+        }
+        operationLog.setUserId(userId);
+        operationLog.setIp(ServletUtil.getIP());
+        operationLog.setCreateTime(System.currentTimeMillis());
+        this.save(operationLog);
     }
 }

+ 39 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ServletUtil.java

@@ -299,4 +299,43 @@ public class ServletUtil {
         //目的是将localhost访问对应的ip 0:0:0:0:0:0:0:1 转成 127.0.0.1。
         return ipStr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipStr;
     }
+
+    /**
+     * excludeProxyIp
+     *
+     * @param request request
+     * @param excludeProxyIp 是否排除代理ip
+     * @return ip
+     */
+    public static String getRemoteIp(HttpServletRequest request, boolean excludeProxyIp) {
+        String ip = request.getHeader("X-Forwarded-For");
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("x-real-ip");
+        }
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+
+        if (excludeProxyIp) {
+            //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+            if (ip != null && ip.length() > 15) { //"***.***.***.***".length() = 15
+                if (ip.indexOf(",") > 0) {
+                    ip = ip.substring(0, ip.indexOf(","));
+                }
+            }
+        }
+        return ip;
+    }
 }