system针对审计日志的微调

This commit is contained in:
2024-08-19 19:55:12 +08:00
parent f36b3f9ee9
commit c2af7e708c
5 changed files with 116 additions and 17 deletions

View File

@@ -343,6 +343,20 @@ public class RequestUtil {
return StrUtil.isBlank(loginName) ? LogInfo.UNKNOWN_USER : loginName;
}
/**
* ServerHttpRequest获取在网关中存储的用户昵称
*/
public static String getLoginNameByPayload(HttpServletRequest request) {
String loginName = LogInfo.UNKNOWN_USER;
JSONObject jwtPayload = getJwtPayload(request);
if (Objects.nonNull(jwtPayload)) {
String loginNameTemp = jwtPayload.getString(SecurityConstants.USER_NAME_KEY);
loginName = StrUtil.isBlank(loginNameTemp) ? LogInfo.UNKNOWN_USER : loginNameTemp;
}
return loginName;
}
/**
* ServerHttpRequest获取在网关中存储的用户昵称
*/

View File

@@ -46,4 +46,16 @@ public class AuditParam {
@Range(min = 1,message = "条数必须大于0")
private Integer pageSize;
@ApiModelProperty("排序")
private String orderBy;
@ApiModelProperty("排序字段")
private String sortBy;
@ApiModelProperty("排序字段中文名")
private String sortName;
@ApiModelProperty("是否导出")
private boolean export;
}

View File

@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.List;
@@ -46,9 +47,10 @@ public class AuditController extends BaseController {
@PostMapping("/getAuditLog")
@ApiOperation("审计日志列表")
@ApiImplicitParam(name = "auditParam", value = "审计日志参数", required = true)
public HttpResult<Page<AuditLogVO>> getAuditLog(@RequestBody @Validated AuditParam auditParam){
public HttpResult<Page<AuditLogVO>> getAuditLog(@RequestBody @Validated AuditParam auditParam, HttpServletRequest request){
String methodDescribe = getMethodDescribe("getAuditLog");
Page<AuditLogVO> result = auditService.getAuditLog(auditParam);
auditService.saveAuditLog(request,auditParam,methodDescribe);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,result,methodDescribe);
}

View File

@@ -9,6 +9,7 @@ import com.njcn.system.pojo.vo.AuditLogVO;
import com.njcn.system.pojo.vo.LogParamVO;
import com.njcn.system.pojo.vo.OnlineUsersVO;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.List;
@@ -24,6 +25,11 @@ public interface AuditService extends IService<UserLog> {
*/
Page<AuditLogVO> getAuditLog(AuditParam auditParam);
/**
* 异步存储审计排序或到处日志
*/
void saveAuditLog(HttpServletRequest request, AuditParam auditParam, String methodDescribe);
/**
* 日志文件备份下载
*/

View File

@@ -21,14 +21,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.nimbusds.jose.JWSObject;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.LogInfo;
import com.njcn.common.pojo.constant.OperateType;
import com.njcn.common.pojo.constant.SecurityConstants;
import com.njcn.common.pojo.dto.DeviceLogDTO;
import com.njcn.common.pojo.dto.LogInfoDTO;
import com.njcn.common.pojo.dto.UserTokenInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.common.utils.ReflectCommonUtil;
import com.njcn.oss.constant.OssPath;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.enums.AuditLogEnum;
@@ -43,17 +50,21 @@ import com.njcn.system.service.AuditService;
import com.njcn.system.service.IConfigService;
import com.njcn.user.api.UserFeignClient;
import com.njcn.user.pojo.po.User;
import com.njcn.web.advice.DeviceLog;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
@@ -91,33 +102,42 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
private final IConfigService iConfigService;
private final MqttPublisher publisher;
@Override
public Page<AuditLogVO> getAuditLog(AuditParam auditParam) {
List<AuditLogVO> auditLogVOS = new ArrayList<>();
LambdaQueryWrapper<UserLog> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper
.between(UserLog::getCreateTime, DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())),
QueryWrapper<UserLog> queryWrapper = new QueryWrapper<>();
queryWrapper
.between("sys_user_log.create_time", DateUtil.beginOfDay(DateUtil.parse(auditParam.getSearchBeginTime())),
DateUtil.endOfDay(DateUtil.parse(auditParam.getSearchEndTime())))
.ne(UserLog::getLoginName,UNKNOWN_USER)
.orderByDesc(UserLog::getCreateTime);
.ne("sys_user_log.login_name", UNKNOWN_USER);
if (StrUtil.isNotBlank(auditParam.getLoginName())) {
lambdaQueryWrapper.eq(UserLog::getLoginName, auditParam.getLoginName());
queryWrapper.eq("sys_user_log.login_name", auditParam.getLoginName());
}
if (StrUtil.isNotBlank(auditParam.getOperateType())) {
lambdaQueryWrapper.eq(UserLog::getOperateType, auditParam.getOperateType());
queryWrapper.eq("sys_user_log.operate_type", auditParam.getOperateType());
}
if (Objects.nonNull(auditParam.getType())) {
lambdaQueryWrapper.eq(UserLog::getType, auditParam.getType());
queryWrapper.eq("sys_user_log.type", auditParam.getType());
}
if (Objects.nonNull(auditParam.getResult())) {
lambdaQueryWrapper.eq(UserLog::getResult, auditParam.getResult());
queryWrapper.eq("sys_user_log.result", auditParam.getResult());
}
if (StrUtil.isNotBlank(auditParam.getSortBy()) && StrUtil.isNotBlank(auditParam.getOrderBy())) {
if (auditParam.getOrderBy().equalsIgnoreCase("desc")) {
queryWrapper.orderByDesc("sys_user_log." + auditParam.getSortBy());
} else {
queryWrapper.orderByAsc("sys_user_log." + auditParam.getSortBy());
}
} else {
queryWrapper.orderByDesc("sys_user_log.create_time");
}
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), lambdaQueryWrapper);
Page<UserLog> info = this.page(new Page<>(auditParam.getPageNum(), auditParam.getPageSize()), queryWrapper);
Page<AuditLogVO> page = BeanUtil.copyProperties(info, Page.class);
if (CollUtil.isNotEmpty(info.getRecords())) {
@@ -156,6 +176,37 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
return page;
}
@Override
@Async("asyncExecutor")
public void saveAuditLog(HttpServletRequest request, AuditParam auditParam, String methodDescribe) {
//处理审计日志
String loginName;
String userName;
String userIndex;
loginName = RequestUtil.getLoginNameByPayload(request);
userName = RequestUtil.getUserNickname(request);
userIndex = RequestUtil.getUserIndex(request);
String result = CommonResponseEnum.SUCCESS.getMessage();
String ip = RequestUtil.getRealIp(request);
String type = LogEnum.BUSINESS_COMMON.getOperateType();
String level = LogEnum.BUSINESS_COMMON.getOperateLevel();
String operateType = OperateType.QUERY;
Integer severity = levelStringToNumber(level);
if(auditParam.isExport()){
methodDescribe = "审计日志列表导出";
}else{
if (StrUtil.isNotBlank(auditParam.getSortBy()) && StrUtil.isNotBlank(auditParam.getOrderBy())) {
methodDescribe = methodDescribe.concat("并以")
.concat(auditParam.getSortName())
.concat("进行")
.concat(auditParam.getOrderBy().equalsIgnoreCase("desc")?"降序":"升序")
.concat("查询");
}
}
LogInfoDTO logInfoDTO = new LogInfoDTO(loginName, userName, ip, methodDescribe, operateType, result.equalsIgnoreCase("失败") ? 0 : 1, "", severity, type.equalsIgnoreCase("业务事件") ? 0 : 1, generalInfo.getMicroServiceName(), userIndex, LocalDateTime.now());
publisher.send("/userLog", PubUtils.obj2json(logInfoDTO), 2, false);
}
@Override
public void logFileWriter() {
TimeInterval timeInterval = new TimeInterval();
@@ -440,4 +491,18 @@ public class AuditServiceImpl extends ServiceImpl<UserLogMapper, UserLog> implem
return newFile;
}
/**
* 严重度 文字 转 数字
*/
private Integer levelStringToNumber(String level) {
switch (level) {
case "中等":
return 1;
case "严重":
return 2;
default:
return 0;
}
}
}