diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java index bcc736e..25d2684 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/config/LoginInterceptor.java @@ -115,6 +115,7 @@ public class LoginInterceptor implements HandlerInterceptor { .accessDuration(accessEndTime - accessStartTime) .action(userOperation.value()) .requestUrl(request.getRequestURL().toString()) + .requestIp(parseIpFromUrl(request.getRequestURL().toString())) .reqArgs(reqArgs) .remoteAddr(getRealIp(request)) .accessSuccess(true) @@ -159,4 +160,12 @@ public class LoginInterceptor implements HandlerInterceptor { return ipAddress; } + private static String parseIpFromUrl(String url) { + + int start = url.indexOf("//"); + url = url.substring(start + 2); + int end = url.indexOf("/"); + return url.substring(0, end); + } + } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AccessLogController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AccessLogController.java new file mode 100644 index 0000000..45279ff --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/AccessLogController.java @@ -0,0 +1,11 @@ +package com.electromagnetic.industry.software.manage.controller; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class AccessLogController { + + + + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java index cf10a2a..5291757 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/controller/EdFileInfoController.java @@ -160,4 +160,9 @@ public class EdFileInfoController { public ResponseEntity preview(@RequestParam String id, HttpServletResponse response) { return edFileInfoService.preview(id, response, DataOwnEnum.COMMON.code); } + + + + + } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java index c4fbe4e..c07d0cc 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/UserMapper.java @@ -1,5 +1,6 @@ package com.electromagnetic.industry.software.manage.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.electromagnetic.industry.software.manage.pojo.models.User; import com.electromagnetic.industry.software.manage.pojo.other.PublishParam; import com.electromagnetic.industry.software.manage.pojo.other.SearchKeyWords; @@ -9,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper -public interface UserMapper { +public interface UserMapper extends BaseMapper { /** * 插入 diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserAccessLog.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserAccessLog.java index 2000b75..9af36a7 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserAccessLog.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/UserAccessLog.java @@ -31,6 +31,9 @@ public class UserAccessLog { // 请求的url private String requestUrl; + // 请求的ip + private String requestIp; + // 请求的参数 private String reqArgs; @@ -55,4 +58,7 @@ public class UserAccessLog { // 数据id private String dataId; + // 父id,最权限需要 + private String parentId; + } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/AccessLogQueryDTO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/AccessLogQueryDTO.java new file mode 100644 index 0000000..636eadf --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/req/AccessLogQueryDTO.java @@ -0,0 +1,14 @@ +package com.electromagnetic.industry.software.manage.pojo.req; + +import lombok.Data; + +@Data +public class AccessLogQueryDTO { + + private String dataId; + + private int pageNum; + + private int pageSize; + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/AccessLogQueryVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/AccessLogQueryVO.java new file mode 100644 index 0000000..1de2228 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/AccessLogQueryVO.java @@ -0,0 +1,40 @@ +package com.electromagnetic.industry.software.manage.pojo.resp; + +import lombok.Data; + +import java.util.Date; + +@Data +public class AccessLogQueryVO { + + private String id; + + private String userId; + + private String username; + + // 进行的操作 + private String action; + + // 操作对象 + private String operationModule; + + // 操作详情 + private String operationMsg; + + // 操作时间 + private Date createTime; + + // 请求远端地址 + private String remoteAddr; + + // 请求是否成功 + private Boolean accessSuccess; + + // 请求耗时 + private Long accessDuration; + + // 请求的ip + private String requestIp; + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java deleted file mode 100644 index 47fe205..0000000 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/FileInfoQueryPageVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.electromagnetic.industry.software.manage.pojo.resp; - -import com.electromagnetic.industry.software.manage.pojo.other.FileInfoVO; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; - -@Data -@AllArgsConstructor -@NoArgsConstructor -public class FileInfoQueryPageVO { - - private long total; - - private List records = new ArrayList<>(); -} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/RespPageVO.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/RespPageVO.java new file mode 100644 index 0000000..b723ae8 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/resp/RespPageVO.java @@ -0,0 +1,23 @@ +package com.electromagnetic.industry.software.manage.pojo.resp; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +@NoArgsConstructor +@Data +public class RespPageVO implements Serializable { + private static final long serialVersionUID = 1L; + + private List list; + + private long total; + + public RespPageVO(long total, List list) { + this.list = list; + this.total = total; + } + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java new file mode 100644 index 0000000..74e6ac1 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/UserAccessLogService.java @@ -0,0 +1,15 @@ +package com.electromagnetic.industry.software.manage.service; + +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.manage.pojo.req.AccessLogQueryDTO; + +public interface UserAccessLogService { + + /** + * 分页查询操作记录(审计) + * @param accessLogQueryDTO + * @return + */ + ElectromagneticResult info(AccessLogQueryDTO accessLogQueryDTO, boolean adminQuery); + +} diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java index 8eefd6a..c504d26 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/CommonService.java @@ -11,7 +11,6 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.electromagnetic.industry.software.common.cons.ElectromagneticConstants; import com.electromagnetic.industry.software.common.enums.*; import com.electromagnetic.industry.software.common.exception.BizException; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; @@ -24,7 +23,6 @@ import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo; import com.electromagnetic.industry.software.manage.pojo.resp.FileProjectVO; import com.electromagnetic.industry.software.manage.pojo.resp.ProjectVO; import com.electromagnetic.industry.software.manage.service.FileSystemService; -import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java index cccf273..2241ba6 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -145,8 +145,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl records = BeanUtil.copyToList(edFileInfoPage.getRecords(), FileInfoVO.class); resetFileSize(records); - UserThreadLocal.setSuccessInfo("", "查询搜索文件成功"); - return ElectromagneticResultUtil.success(new FileInfoQueryPageVO(total, records)); + UserThreadLocal.setSuccessInfo("", "", "查询搜索文件成功"); + return ElectromagneticResultUtil.success(new RespPageVO<>(total, records)); } @Override @@ -174,7 +174,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl res = commonService.addFolder(createFolderDTO.getParentId(), createFolderDTO.getNewFolderName(), false, folderId, createFolderDTO.getFileNote(), dataOwnCode); - UserThreadLocal.setSuccessInfo(res.getData() + "", "创建文件夹成功"); + UserThreadLocal.setSuccessInfo(createFolderDTO.getParentId(), res.getData() + "", "创建文件夹成功"); return res; } @@ -196,7 +196,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl versionBack(String fileId, int targetVersion) { - + EdFileInfo fileInfo = this.baseMapper.selectList(Wrappers.lambdaQuery().eq(EdFileInfo::getFileId, fileId).last("limit 1")).get(0); try { this.baseMapper.update(null, Wrappers.lambdaUpdate(EdFileInfo.class) .eq(EdFileInfo::getFileId, fileId) @@ -349,7 +349,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl fileVersionViewVOS = BeanUtil.copyToList(edFileInfos, FileVersionViewVO.class); - UserThreadLocal.setSuccessInfo(fileId, "查询版本信息成功"); + UserThreadLocal.setSuccessInfo(edFileInfos.get(0).getParentId(), fileId, "查询版本信息成功"); return ElectromagneticResultUtil.success(fileVersionViewVOS); } @@ -866,7 +866,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl edFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), lambdaQuery); long total = edFileInfoPage.getTotal(); List uploadRecordDTOS = BeanUtil.copyToList(edFileInfoPage.getRecords(), UploadRecordDTO.class); - UserThreadLocal.setSuccessInfo("", "查看了发布管理"); + UserThreadLocal.setSuccessInfo("", "", "查看了发布管理"); return ElectromagneticResultUtil.success(new UploadRecordVO(total, uploadRecordDTOS)); } @@ -1028,7 +1028,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl res = BeanUtil.copyToList(edFileInfos, ChildFolderVO.class); - UserThreadLocal.setSuccessInfo(parentId, "查询了子文件集"); + UserThreadLocal.setSuccessInfo(parentId, parentId, "查询了子文件集"); return ElectromagneticResultUtil.success(res); } @@ -1266,7 +1266,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl projectVOS.add(projectVO); }); projectVOS.sort(Comparator.comparing(ProjectVO::getSort)); - UserThreadLocal.setSuccessInfo("", "查询了所有工程"); + UserThreadLocal.setSuccessInfo("", "", "查询了所有工程"); return ElectromagneticResultUtil.success(projectVOS); } @@ -270,7 +270,7 @@ public class EdPrjServiceImpl extends ServiceImpl .eq(EdFileInfo::getId, folderResortDTO.getId()); this.update(updateWrapper); } - UserThreadLocal.setSuccessInfo("", "子集重排序成功"); + UserThreadLocal.setSuccessInfo("", "", "子集重排序成功"); return ElectromagneticResultUtil.success(true); } catch (Exception e) { String info = "子集重排序异常"; @@ -427,7 +427,7 @@ public class EdPrjServiceImpl extends ServiceImpl for (String path : needSavePaths) { fileSystemService.createDirectory(path); } - UserThreadLocal.setSuccessInfo(targetId, "层级沿用成功"); + UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功"); return ElectromagneticResultUtil.success(true); } catch (Exception e) { String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage()); diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java new file mode 100644 index 0000000..dc9e468 --- /dev/null +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/UserAccessLogServiceImpl.java @@ -0,0 +1,64 @@ +package com.electromagnetic.industry.software.manage.service.serviceimpl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; +import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil; +import com.electromagnetic.industry.software.manage.mapper.UserAccessLogMapper; +import com.electromagnetic.industry.software.manage.mapper.UserMapper; +import com.electromagnetic.industry.software.manage.pojo.models.User; +import com.electromagnetic.industry.software.manage.pojo.models.UserAccessLog; +import com.electromagnetic.industry.software.manage.pojo.req.AccessLogQueryDTO; +import com.electromagnetic.industry.software.manage.pojo.resp.AccessLogQueryVO; +import com.electromagnetic.industry.software.manage.pojo.resp.RespPageVO; +import com.electromagnetic.industry.software.manage.service.PermissionService; +import com.electromagnetic.industry.software.manage.service.UserAccessLogService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class UserAccessLogServiceImpl extends ServiceImpl implements UserAccessLogService { + + + @Resource + private UserMapper userMapper; + + @Resource + private PermissionService permissionService; + + + /** + * 分页查询操作记录(审计) + * + * @param pars + * @return + */ + @Override + public ElectromagneticResult info(AccessLogQueryDTO pars, boolean adminQuery) { + + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(UserAccessLog.class); + if (!adminQuery) { + queryWrapper.eq(UserAccessLog::getDataId, pars.getDataId()); + } + Page logs = this.baseMapper.selectPage(new Page<>(pars.getPageNum(), pars.getPageSize()), queryWrapper); + List records = logs.getRecords(); + List res = BeanUtil.copyToList(records, AccessLogQueryVO.class); + setUserName(res); + return ElectromagneticResultUtil.success(new RespPageVO<>(logs.getTotal(), res)); + } + + private void setUserName(List res) { + + List userIds = res.stream().map(AccessLogQueryVO::getUserId).collect(Collectors.toList()); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(User.class).select(User::getUserId, User::getUserName).in(User::getUserId, userIds); + Map idNameMap = userMapper.selectList(wrapper).stream().collect(Collectors.toMap(User::getUserId, User::getUserName)); + res.forEach(e -> e.setUsername(idNameMap.get(e.getUserId()))); + } +} diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/UserLoginInfo.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/UserLoginInfo.java index a2a2c16..5d4bb82 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/UserLoginInfo.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/pojo/UserLoginInfo.java @@ -41,6 +41,8 @@ public class UserLoginInfo { */ private ElectromagneticResult result; + private String parentId; + /** * 访问请求的参数 */ @@ -52,9 +54,10 @@ public class UserLoginInfo { private String dataId; - public void setSuccessInfo(String successMsg, String dataId) { + public void setSuccessInfo(String parentId, String successMsg, String dataId) { this.successMsg = successMsg; this.dataId = dataId; + this.parentId = parentId; } } diff --git a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/UserThreadLocal.java b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/UserThreadLocal.java index 08b7984..552dfc9 100644 --- a/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/UserThreadLocal.java +++ b/electromagnetic-common/src/main/java/com/electromagnetic/industry/software/common/util/UserThreadLocal.java @@ -1,6 +1,7 @@ package com.electromagnetic.industry.software.common.util; +import cn.hutool.core.text.StrFormatter; import com.electromagnetic.industry.software.common.pojo.UserLoginInfo; import com.electromagnetic.industry.software.common.resp.ElectromagneticResult; @@ -50,9 +51,9 @@ public class UserThreadLocal { return userThread.get().getReqArgs(); } - public static void setSuccessInfo(String dataId, String strPattern, Object... argArray) { - String successMsg = String.format(strPattern, argArray); - userThread.get().setSuccessInfo(successMsg, dataId); + public static void setSuccessInfo(String parentId, String dataId, String strPattern, Object... argArray) { + String successMsg = StrFormatter.format(strPattern, argArray); + userThread.get().setSuccessInfo(parentId, successMsg, dataId); } public static void setExceptionDetail(String exceptionDetail) {