diff --git a/kernel-d-log/log-business-security/README.md b/kernel-d-log/log-business-security/README.md new file mode 100644 index 000000000..6e320d638 --- /dev/null +++ b/kernel-d-log/log-business-security/README.md @@ -0,0 +1 @@ +安全日志记录 \ No newline at end of file diff --git a/kernel-d-log/log-business-security/pom.xml b/kernel-d-log/log-business-security/pom.xml new file mode 100644 index 000000000..ebbd21be3 --- /dev/null +++ b/kernel-d-log/log-business-security/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + + com.javaguns.roses + kernel-d-log + 8.1.9 + ../pom.xml + + + log-business-security + + jar + + + + + + com.javaguns.roses + log-api + ${roses.version} + + + + + + com.javaguns.roses + scanner-api + ${roses.version} + + + + + + com.javaguns.roses + auth-api + ${roses.version} + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/controller/LogSecurityController.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/controller/LogSecurityController.java new file mode 100644 index 000000000..df3e587b7 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/controller/LogSecurityController.java @@ -0,0 +1,114 @@ +package cn.stylefeng.roses.kernel.log.security.controller; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.log.security.entity.LogSecurity; +import cn.stylefeng.roses.kernel.log.security.pojo.request.LogSecurityRequest; +import cn.stylefeng.roses.kernel.log.security.service.LogSecurityService; +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 安全日志控制器 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@RestController +@ApiResource(name = "安全日志") +public class LogSecurityController { + + @Resource + private LogSecurityService logSecurityService; + + /** + * 添加安全日志 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @PostResource(name = "添加安全日志", path = "/logSecurity/add") + public ResponseData add(@RequestBody @Validated(LogSecurityRequest.add.class) LogSecurityRequest logSecurityRequest) { + logSecurityService.add(logSecurityRequest); + return new SuccessResponseData<>(); + } + + /** + * 删除安全日志 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @PostResource(name = "删除安全日志", path = "/logSecurity/delete") + public ResponseData delete(@RequestBody @Validated(LogSecurityRequest.delete.class) LogSecurityRequest logSecurityRequest) { + logSecurityService.del(logSecurityRequest); + return new SuccessResponseData<>(); + } + + /** + * 批量删除安全日志 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @PostResource(name = "批量删除安全日志", path = "/logSecurity/batchDelete") + public ResponseData batchDelete(@RequestBody @Validated(BaseRequest.batchDelete.class) LogSecurityRequest logSecurityRequest) { + logSecurityService.batchDelete(logSecurityRequest); + return new SuccessResponseData<>(); + } + + /** + * 编辑安全日志 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @PostResource(name = "编辑安全日志", path = "/logSecurity/edit") + public ResponseData edit(@RequestBody @Validated(LogSecurityRequest.edit.class) LogSecurityRequest logSecurityRequest) { + logSecurityService.edit(logSecurityRequest); + return new SuccessResponseData<>(); + } + + /** + * 查看安全日志详情 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @GetResource(name = "查看安全日志详情", path = "/logSecurity/detail") + public ResponseData detail(@Validated(LogSecurityRequest.detail.class) LogSecurityRequest logSecurityRequest) { + return new SuccessResponseData<>(logSecurityService.detail(logSecurityRequest)); + } + + /** + * 获取安全日志列表 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @GetResource(name = "获取安全日志列表", path = "/logSecurity/list") + public ResponseData> list(LogSecurityRequest logSecurityRequest) { + return new SuccessResponseData<>(logSecurityService.findList(logSecurityRequest)); + } + + /** + * 获取安全日志列表(带分页) + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + @GetResource(name = "获取安全日志列表(带分页)", path = "/logSecurity/page") + public ResponseData> page(LogSecurityRequest logSecurityRequest) { + return new SuccessResponseData<>(logSecurityService.findPage(logSecurityRequest)); + } + +} diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/entity/LogSecurity.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/entity/LogSecurity.java new file mode 100644 index 000000000..81cac60bd --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/entity/LogSecurity.java @@ -0,0 +1,86 @@ +package cn.stylefeng.roses.kernel.log.security.entity; + +import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +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 lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 安全日志实例类 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@TableName("sys_log_security") +@Data +@EqualsAndHashCode(callSuper = true) +public class LogSecurity extends BaseEntity { + + /** + * 主键 + */ + @TableId(value = "security_log_id", type = IdType.ASSIGN_ID) + @ChineseDescription("主键") + private Long securityLogId; + + /** + * 当前用户请求的url + */ + @TableField("request_url") + @ChineseDescription("当前用户请求的url") + private String requestUrl; + + /** + * http或方法的请求参数体 + */ + @TableField("request_params") + @ChineseDescription("http或方法的请求参数体") + private String requestParams; + + /** + * 当前服务器的ip + */ + @TableField("server_ip") + @ChineseDescription("当前服务器的ip") + private String serverIp; + + /** + * 客户端的ip + */ + @TableField("client_ip") + @ChineseDescription("客户端的ip") + private String clientIp; + + /** + * 请求http方法 + */ + @TableField("http_method") + @ChineseDescription("请求http方法") + private String httpMethod; + + /** + * 客户浏览器标识 + */ + @TableField("client_browser") + @ChineseDescription("客户浏览器标识") + private String clientBrowser; + + /** + * 客户操作系统 + */ + @TableField("client_os") + @ChineseDescription("客户操作系统") + private String clientOs; + + /** + * 安全日志内容 + */ + @TableField("log_content") + @ChineseDescription("安全日志内容") + private String logContent; + +} \ No newline at end of file diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/enums/LogSecurityExceptionEnum.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/enums/LogSecurityExceptionEnum.java new file mode 100644 index 000000000..c1b4622d4 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/enums/LogSecurityExceptionEnum.java @@ -0,0 +1,36 @@ +package cn.stylefeng.roses.kernel.log.security.enums; + +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; +import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum; +import lombok.Getter; + +/** + * 安全日志异常相关枚举 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@Getter +public enum LogSecurityExceptionEnum implements AbstractExceptionEnum { + + /** + * 查询结果不存在 + */ + LOG_SECURITY_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + + /** + * 错误编码 + */ + private final String errorCode; + + /** + * 提示用户信息 + */ + private final String userTip; + + LogSecurityExceptionEnum(String errorCode, String userTip) { + this.errorCode = errorCode; + this.userTip = userTip; + } + +} diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/LogSecurityMapper.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/LogSecurityMapper.java new file mode 100644 index 000000000..af0551513 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/LogSecurityMapper.java @@ -0,0 +1,28 @@ +package cn.stylefeng.roses.kernel.log.security.mapper; + +import cn.stylefeng.roses.kernel.log.security.entity.LogSecurity; +import cn.stylefeng.roses.kernel.log.security.pojo.request.LogSecurityRequest; +import cn.stylefeng.roses.kernel.log.security.pojo.response.LogSecurityVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 安全日志 Mapper 接口 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +public interface LogSecurityMapper extends BaseMapper { + + /** + * 获取自定义查询列表 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + List customFindList(@Param("page") Page page, @Param("param")LogSecurityRequest request); + +} diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/mapping/LogSecurityMapper.xml b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/mapping/LogSecurityMapper.xml new file mode 100644 index 000000000..75f56dcf7 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/mapper/mapping/LogSecurityMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + security_log_id,request_url,request_params,server_ip,client_ip,http_method,client_browser,client_os,log_content,create_time,create_user,update_time,update_user + + + + + + + + diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/request/LogSecurityRequest.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/request/LogSecurityRequest.java new file mode 100644 index 000000000..290d9f68b --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/request/LogSecurityRequest.java @@ -0,0 +1,83 @@ +package cn.stylefeng.roses.kernel.log.security.pojo.request; + +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 安全日志封装类 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class LogSecurityRequest extends BaseRequest { + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {edit.class, delete.class}) + @ChineseDescription("主键") + private Long securityLogId; + + /** + * 当前用户请求的url + */ + @ChineseDescription("当前用户请求的url") + private String requestUrl; + + /** + * http或方法的请求参数体 + */ + @ChineseDescription("http或方法的请求参数体") + private String requestParams; + + /** + * 当前服务器的ip + */ + @ChineseDescription("当前服务器的ip") + private String serverIp; + + /** + * 客户端的ip + */ + @ChineseDescription("客户端的ip") + private String clientIp; + + /** + * 请求http方法 + */ + @ChineseDescription("请求http方法") + private String httpMethod; + + /** + * 客户浏览器标识 + */ + @ChineseDescription("客户浏览器标识") + private String clientBrowser; + + /** + * 客户操作系统 + */ + @ChineseDescription("客户操作系统") + private String clientOs; + + /** + * 安全日志内容 + */ + @ChineseDescription("安全日志内容") + private String logContent; + + /** + * 批量删除用的id集合 + */ + @NotNull(message = "批量删除id集合不能为空", groups = batchDelete.class) + @ChineseDescription("批量删除用的id集合") + private List batchDeleteIdList; + +} \ No newline at end of file diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/response/LogSecurityVo.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/response/LogSecurityVo.java new file mode 100644 index 000000000..3590fd2ca --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/pojo/response/LogSecurityVo.java @@ -0,0 +1,17 @@ +package cn.stylefeng.roses.kernel.log.security.pojo.response; + +import cn.stylefeng.roses.kernel.log.security.entity.LogSecurity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 安全日志返回值封装 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class LogSecurityVo extends LogSecurity { + +} diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/LogSecurityService.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/LogSecurityService.java new file mode 100644 index 000000000..52ce2d7f2 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/LogSecurityService.java @@ -0,0 +1,83 @@ +package cn.stylefeng.roses.kernel.log.security.service; + +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.log.security.entity.LogSecurity; +import cn.stylefeng.roses.kernel.log.security.pojo.request.LogSecurityRequest; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 安全日志服务类 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +public interface LogSecurityService extends IService { + + /** + * 新增安全日志 + * + * @param logSecurityRequest 请求参数 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + void add(LogSecurityRequest logSecurityRequest); + + /** + * 删除安全日志 + * + * @param logSecurityRequest 请求参数 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + void del(LogSecurityRequest logSecurityRequest); + + /** + * 批量删除安全日志 + * + * @param logSecurityRequest 请求参数 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + void batchDelete(LogSecurityRequest logSecurityRequest); + + /** + * 编辑安全日志 + * + * @param logSecurityRequest 请求参数 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + void edit(LogSecurityRequest logSecurityRequest); + + /** + * 查询详情安全日志 + * + * @param logSecurityRequest 请求参数 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + LogSecurity detail(LogSecurityRequest logSecurityRequest); + + /** + * 获取安全日志列表 + * + * @param logSecurityRequest 请求参数 + * @return List 返回结果 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + List findList(LogSecurityRequest logSecurityRequest); + + /** + * 获取安全日志分页列表 + * + * @param logSecurityRequest 请求参数 + * @return PageResult 返回结果 + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + PageResult findPage(LogSecurityRequest logSecurityRequest); + +} diff --git a/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/impl/LogSecurityServiceImpl.java b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/impl/LogSecurityServiceImpl.java new file mode 100644 index 000000000..1161cc763 --- /dev/null +++ b/kernel-d-log/log-business-security/src/main/java/cn/stylefeng/roses/kernel/log/security/service/impl/LogSecurityServiceImpl.java @@ -0,0 +1,129 @@ +package cn.stylefeng.roses.kernel.log.security.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; +import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; +import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.log.security.entity.LogSecurity; +import cn.stylefeng.roses.kernel.log.security.enums.LogSecurityExceptionEnum; +import cn.stylefeng.roses.kernel.log.security.mapper.LogSecurityMapper; +import cn.stylefeng.roses.kernel.log.security.pojo.request.LogSecurityRequest; +import cn.stylefeng.roses.kernel.log.security.service.LogSecurityService; +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 安全日志业务实现层 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ +@Service +public class LogSecurityServiceImpl extends ServiceImpl implements LogSecurityService { + + @Override + public void add(LogSecurityRequest logSecurityRequest) { + LogSecurity logSecurity = new LogSecurity(); + BeanUtil.copyProperties(logSecurityRequest, logSecurity); + this.save(logSecurity); + } + + @Override + public void del(LogSecurityRequest logSecurityRequest) { + LogSecurity logSecurity = this.queryLogSecurity(logSecurityRequest); + this.removeById(logSecurity.getSecurityLogId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchDelete(LogSecurityRequest logSecurityRequest) { + this.removeByIds(logSecurityRequest.getBatchDeleteIdList()); + } + + @Override + public void edit(LogSecurityRequest logSecurityRequest) { + LogSecurity logSecurity = this.queryLogSecurity(logSecurityRequest); + BeanUtil.copyProperties(logSecurityRequest, logSecurity); + this.updateById(logSecurity); + } + + @Override + public LogSecurity detail(LogSecurityRequest logSecurityRequest) { + return this.queryLogSecurity(logSecurityRequest); + } + + @Override + public PageResult findPage(LogSecurityRequest logSecurityRequest) { + LambdaQueryWrapper wrapper = createWrapper(logSecurityRequest); + Page pageList = this.page(PageFactory.defaultPage(), wrapper); + return PageResultFactory.createPageResult(pageList); + } + + @Override + public List findList(LogSecurityRequest logSecurityRequest) { + LambdaQueryWrapper wrapper = this.createWrapper(logSecurityRequest); + return this.list(wrapper); + } + + /** + * 获取信息 + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + private LogSecurity queryLogSecurity(LogSecurityRequest logSecurityRequest) { + LogSecurity logSecurity = this.getById(logSecurityRequest.getSecurityLogId()); + if (ObjectUtil.isEmpty(logSecurity)) { + throw new ServiceException(LogSecurityExceptionEnum.LOG_SECURITY_NOT_EXISTED); + } + return logSecurity; + } + + /** + * 创建查询wrapper + * + * @author fengshuonan + * @since 2024/07/11 15:56 + */ + private LambdaQueryWrapper createWrapper(LogSecurityRequest logSecurityRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + Long securityLogId = logSecurityRequest.getSecurityLogId(); + queryWrapper.eq(ObjectUtil.isNotNull(securityLogId), LogSecurity::getSecurityLogId, securityLogId); + + String requestUrl = logSecurityRequest.getRequestUrl(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestUrl), LogSecurity::getRequestUrl, requestUrl); + + String requestParams = logSecurityRequest.getRequestParams(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestParams), LogSecurity::getRequestParams, requestParams); + + String serverIp = logSecurityRequest.getServerIp(); + queryWrapper.like(ObjectUtil.isNotEmpty(serverIp), LogSecurity::getServerIp, serverIp); + + String clientIp = logSecurityRequest.getClientIp(); + queryWrapper.like(ObjectUtil.isNotEmpty(clientIp), LogSecurity::getClientIp, clientIp); + + String httpMethod = logSecurityRequest.getHttpMethod(); + queryWrapper.like(ObjectUtil.isNotEmpty(httpMethod), LogSecurity::getHttpMethod, httpMethod); + + String clientBrowser = logSecurityRequest.getClientBrowser(); + queryWrapper.like(ObjectUtil.isNotEmpty(clientBrowser), LogSecurity::getClientBrowser, clientBrowser); + + String clientOs = logSecurityRequest.getClientOs(); + queryWrapper.like(ObjectUtil.isNotEmpty(clientOs), LogSecurity::getClientOs, clientOs); + + String logContent = logSecurityRequest.getLogContent(); + queryWrapper.like(ObjectUtil.isNotEmpty(logContent), LogSecurity::getLogContent, logContent); + + + return queryWrapper; + } + +} diff --git a/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240710_1705__add_login_log_account.sql b/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240710_1705__add_login_log_account.sql deleted file mode 100644 index 69eeb97d8..000000000 --- a/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240710_1705__add_login_log_account.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `sys_login_log` ADD COLUMN `account` varchar(255) NULL COMMENT '账号' AFTER `user_id`; \ No newline at end of file diff --git a/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240711_1545__add_sec_log.sql b/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240711_1545__add_sec_log.sql new file mode 100644 index 000000000..df50b7380 --- /dev/null +++ b/kernel-d-log/log-spring-boot-starter/src/main/resources/db/migration/mysql/V8.1.9_20240711_1545__add_sec_log.sql @@ -0,0 +1,18 @@ +ALTER TABLE `sys_login_log` ADD COLUMN `account` varchar(255) NULL COMMENT '账号' AFTER `user_id`; + +CREATE TABLE `sys_log_security` ( + `security_log_id` bigint NOT NULL COMMENT '主键', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前用户请求的url', + `request_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'http或方法的请求参数体', + `server_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前服务器的ip', + `client_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户端的ip', + `http_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求http方法', + `client_browser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户浏览器标识', + `client_os` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户操作系统', + `log_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '安全日志内容', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `create_user` bigint DEFAULT NULL COMMENT '创建人', + `update_time` datetime DEFAULT NULL COMMENT '修改时间', + `update_user` bigint DEFAULT NULL COMMENT '修改人', + PRIMARY KEY (`security_log_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='安全日志'; \ No newline at end of file diff --git a/kernel-d-log/pom.xml b/kernel-d-log/pom.xml index 7242c38d9..85217bd1a 100644 --- a/kernel-d-log/pom.xml +++ b/kernel-d-log/pom.xml @@ -20,6 +20,7 @@ log-business log-business-login-log log-business-requestapi + log-business-security log-spring-boot-starter