From e6ba0530fe252a38c0a45e2d238dd60aa027b1aa Mon Sep 17 00:00:00 2001 From: b2baccline <23131013+b2baccline@users.noreply.github.com> Date: Tue, 10 Dec 2019 15:20:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=97=A5=E5=BF=97=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E8=AF=B7=E6=B1=82=E6=98=A0=E5=B0=84=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=8C=E4=BE=BF=E4=BA=8E=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- README.md | 2 +- ballcat-admin/pom.xml | 2 - .../ballcat/admin/AdminApplication.java | 3 +- .../log/model/entity/AdminAccessLog.java | 5 ++ .../AdminAccessLogHandlerServiceImpl.java | 2 + .../controller/SysPermissionController.java | 3 +- .../src/main/resources/application.yml | 2 +- .../hccake/ballcat/admin/test/TestUpdate.java | 15 ++-- .../hccake/ballcat/api/ApiApplication.java | 3 +- .../api/controller/TestController.java | 26 ++++++ .../ApiAccessLogHandlerServiceImpl.java | 6 +- .../src/main/resources/application.yml | 14 ++-- .../conf/web/SqlFilterArgumentResolver.java | 2 +- .../ballcat/common/conf/web/WebMvcConfig.java | 5 ++ ballcat-common/ballcat-common-log/pom.xml | 2 +- .../log/access/filter/AccessLogFilter.java | 14 +--- .../commom/log/access/model/AccessLogDTO.java | 82 ------------------- .../service/AccessLogHandlerService.java | 23 ++++-- .../api/model/entity/ApiAccessLog.java | 5 ++ ballcat-monitor/pom.xml | 1 - pom.xml | 21 ++++- 22 files changed, 115 insertions(+), 126 deletions(-) delete mode 100644 ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/model/AccessLogDTO.java diff --git a/.gitignore b/.gitignore index 68299dd1..edada64d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ build/ ### VS Code ### .vscode/ -/**/application-hccake.yml \ No newline at end of file +/**/application-hccake.yml +/**/application-preview.yml \ No newline at end of file diff --git a/README.md b/README.md index a2aba2fb..c6613da9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ 基于`SpringBoot` + `Ant Design Vue`的前后端分离应用。 目前支持代码生成,前后台用户分离,权限控制,定时任务,访问日志,操作日志,异常日志,统一异常处理,XSS过滤,SQL防注入等功能 -- 前端ui git地址: https://github.com/Hccake/ballcat-ui +- 前端ui git地址: https://github.com/Hccake/ballcat-ui-vue - 预览地址: http://preview.ballcat.cn - 代码生成: http://preview.ballcat.cn/codegen - 任务调度中心: http://preview.ballcat.cn/xxl-job-admin diff --git a/ballcat-admin/pom.xml b/ballcat-admin/pom.xml index 5e393bd7..27bba94d 100644 --- a/ballcat-admin/pom.xml +++ b/ballcat-admin/pom.xml @@ -75,12 +75,10 @@ org.springframework.security.oauth spring-security-oauth2 - de.codecentric spring-boot-admin-starter-client - 2.1.6 org.springframework.boot diff --git a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/AdminApplication.java b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/AdminApplication.java index a119ade6..29c19419 100644 --- a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/AdminApplication.java +++ b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/AdminApplication.java @@ -1,6 +1,7 @@ package com.hccake.ballcat.admin; import com.hccake.ballcat.commom.log.access.annotation.EnableAccessLog; +import com.hccake.ballcat.common.job.annotation.EnableXxlJob; import com.hccake.ballcat.common.swagger.annotation.EnableSwagger2Aggregator; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,7 +10,7 @@ import org.springframework.boot.web.servlet.ServletComponentScan; /** * @author Hccake */ -/*@EnableXxlJob*/ +@EnableXxlJob @EnableSwagger2Aggregator @EnableAccessLog @ServletComponentScan("com.hccake.ballcat.admin.oauth.filter") diff --git a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/model/entity/AdminAccessLog.java b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/model/entity/AdminAccessLog.java index dc536ab1..3a1450cb 100644 --- a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/model/entity/AdminAccessLog.java +++ b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/model/entity/AdminAccessLog.java @@ -56,6 +56,11 @@ public class AdminAccessLog extends Model { */ @ApiModelProperty(value = "请求URI") private String uri; + /** + * 请求映射地址 + */ + @ApiModelProperty(value = "请求映射地址") + private String matchingPattern; /** * 操作方式 */ diff --git a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/service/impl/AdminAccessLogHandlerServiceImpl.java b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/service/impl/AdminAccessLogHandlerServiceImpl.java index dc49a872..ef221116 100644 --- a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/service/impl/AdminAccessLogHandlerServiceImpl.java +++ b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/log/service/impl/AdminAccessLogHandlerServiceImpl.java @@ -12,6 +12,7 @@ import com.hccake.ballcat.common.core.util.IPUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.servlet.HandlerMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -50,6 +51,7 @@ public class AdminAccessLogHandlerServiceImpl implements AccessLogHandlerService .setMethod(request.getMethod()) .setUserAgent(request.getHeader("user-agent")) .setUri(URLUtil.getPath(request.getRequestURI())) + .setMatchingPattern(String.valueOf(request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE))) .setErrorMsg(Optional.ofNullable(myThrowable).map(Throwable::getMessage).orElse(null)) .setHttpStatus(response.getStatus()) .setReqParams(JSONUtil.toJsonStr(request.getParameterMap())) diff --git a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysPermissionController.java b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysPermissionController.java index ef41dca5..be7da482 100644 --- a/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysPermissionController.java +++ b/ballcat-admin/src/main/java/com/hccake/ballcat/admin/modules/sys/controller/SysPermissionController.java @@ -39,8 +39,9 @@ public class SysPermissionController { * * @return 当前用户的路由 */ + @ApiOperation(value = "动态路由", notes = "动态路由") @GetMapping("/router") - public R getUserPermission() { + public R> getUserPermission() { //获取角色ID SysUserDetails sysUserDetails = SecurityUtils.getSysUserDetails(); diff --git a/ballcat-admin/src/main/resources/application.yml b/ballcat-admin/src/main/resources/application.yml index 496311bb..079d283c 100644 --- a/ballcat-admin/src/main/resources/application.yml +++ b/ballcat-admin/src/main/resources/application.yml @@ -45,7 +45,7 @@ xxl: admin: addresses: http://ballcat-job:8888/xxl-job-admin # xxl-job-admin 接口地址 executor: - port: 7888 #通讯端口 + port: 8081 #通讯端口 appName: ballcat-admin-job diff --git a/ballcat-admin/src/test/java/com/hccake/ballcat/admin/test/TestUpdate.java b/ballcat-admin/src/test/java/com/hccake/ballcat/admin/test/TestUpdate.java index 67528f5a..c6f2ba3e 100644 --- a/ballcat-admin/src/test/java/com/hccake/ballcat/admin/test/TestUpdate.java +++ b/ballcat-admin/src/test/java/com/hccake/ballcat/admin/test/TestUpdate.java @@ -1,8 +1,9 @@ package com.hccake.ballcat.admin.test; -import com.hccake.ballcat.admin.modules.sys.service.SysRoleService; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hccake.ballcat.admin.modules.sys.model.entity.SysRole; import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; /** @@ -13,14 +14,16 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class TestUpdate { - @Autowired - private SysRoleService sysRoleService; + @Test - public void test(){ - + public void test() { + Wrapper wrapper = Wrappers.query(); + System.out.println(wrapper.getSqlSelect()); + System.out.println(wrapper.getCustomSqlSegment()); + System.out.println(wrapper.getExpression().getSqlSegment()); } } diff --git a/ballcat-api/src/main/java/com/hccake/ballcat/api/ApiApplication.java b/ballcat-api/src/main/java/com/hccake/ballcat/api/ApiApplication.java index d0680052..120a5037 100644 --- a/ballcat-api/src/main/java/com/hccake/ballcat/api/ApiApplication.java +++ b/ballcat-api/src/main/java/com/hccake/ballcat/api/ApiApplication.java @@ -1,13 +1,12 @@ package com.hccake.ballcat.api; import com.hccake.ballcat.commom.log.access.annotation.EnableAccessLog; +import com.hccake.ballcat.common.job.annotation.EnableXxlJob; import com.hccake.ballcat.common.swagger.annotation.EnableSwagger2Provider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -/* @EnableXxlJob -*/ @EnableSwagger2Provider @EnableAccessLog @SpringBootApplication diff --git a/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/api/controller/TestController.java b/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/api/controller/TestController.java index b6b4098c..6877d3b6 100644 --- a/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/api/controller/TestController.java +++ b/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/api/controller/TestController.java @@ -1,7 +1,12 @@ package com.hccake.ballcat.api.modules.api.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.hccake.ballcat.api.modules.api.model.entity.ApiAccessLog; +import com.hccake.ballcat.api.modules.log.service.ApiAccessLogService; import com.hccake.ballcat.common.core.exception.BallCatException; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; @@ -16,6 +21,9 @@ import java.time.LocalDateTime; @RestController public class TestController { + @Autowired + private ApiAccessLogService apiAccessLogService; + @ApiOperation("测试地址") @PostMapping("/test") @@ -23,6 +31,24 @@ public class TestController { return "Hello word!"; } + + @GetMapping("/test/{test}") + public String test(@PathVariable String test){ + return "Hello " + test; + } + + + @GetMapping("/test/page") + public String page(){ + + apiAccessLogService.page(new Page<>(), Wrappers.query().eq("id", 1)); + + apiAccessLogService.page(new Page<>(), Wrappers.lambdaQuery().eq(ApiAccessLog::getId, 1)); + + return "Hello word!"; + } + + @PostMapping("/formdata") public String test1(@RequestParam("formdata")String formdata){ return formdata; diff --git a/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/log/service/ApiAccessLogHandlerServiceImpl.java b/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/log/service/ApiAccessLogHandlerServiceImpl.java index 6e572224..63db1ca4 100644 --- a/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/log/service/ApiAccessLogHandlerServiceImpl.java +++ b/ballcat-api/src/main/java/com/hccake/ballcat/api/modules/log/service/ApiAccessLogHandlerServiceImpl.java @@ -2,14 +2,15 @@ package com.hccake.ballcat.api.modules.log.service; import cn.hutool.core.util.URLUtil; import cn.hutool.json.JSONUtil; +import com.hccake.ballcat.api.modules.api.model.entity.ApiAccessLog; +import com.hccake.ballcat.api.modules.log.thread.ApiAccessLogSaveThread; import com.hccake.ballcat.commom.log.access.service.AccessLogHandlerService; import com.hccake.ballcat.commom.log.util.LogUtils; import com.hccake.ballcat.common.core.util.IPUtil; -import com.hccake.ballcat.api.modules.api.model.entity.ApiAccessLog; -import com.hccake.ballcat.api.modules.log.thread.ApiAccessLogSaveThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.servlet.HandlerMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -47,6 +48,7 @@ public class ApiAccessLogHandlerServiceImpl implements AccessLogHandlerService argumentResolvers) { argumentResolvers.add(new SqlFilterArgumentResolver()); diff --git a/ballcat-common/ballcat-common-log/pom.xml b/ballcat-common/ballcat-common-log/pom.xml index 3fa3b700..1650ccdd 100644 --- a/ballcat-common/ballcat-common-log/pom.xml +++ b/ballcat-common/ballcat-common-log/pom.xml @@ -22,7 +22,7 @@ org.springframework - spring-web + spring-webmvc compile diff --git a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/filter/AccessLogFilter.java b/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/filter/AccessLogFilter.java index f4bda2d8..54786b29 100644 --- a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/filter/AccessLogFilter.java +++ b/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/filter/AccessLogFilter.java @@ -40,12 +40,11 @@ public class AccessLogFilter extends OncePerRequestFilter { filterChain.doFilter(request, response); return; } - + // 包装request,以保证可以重复读取body RepeatBodyRequestWrapper requestWrapper = new RepeatBodyRequestWrapper(request); // 开始时间 Long startTime = System.currentTimeMillis(); - Throwable myThrowable = null; try { filterChain.doFilter(requestWrapper, response); @@ -57,19 +56,14 @@ public class AccessLogFilter extends OncePerRequestFilter { // 结束时间 Long endTime = System.currentTimeMillis(); // 执行时长 - Long time = endTime - startTime; - + Long executionTime = endTime - startTime; // 记录在doFilter里被程序处理过后的异常,可参考 http://www.runoob.com/servlet/servlet-exception-handling.html Throwable throwable = (Throwable) requestWrapper.getAttribute("javax.servlet.error.exception"); if (throwable != null) { myThrowable = throwable; } - - // 生产一个日志 - // 备注这里的request已经被xss过滤器包装过了 所以可以重复读取body - Object object = accessLogService.prodLog(requestWrapper, response, time, myThrowable); - // 日志记录 - accessLogService.saveLog(object); + // 生产一个日志并记录 + accessLogService.logRecord(requestWrapper, response, executionTime, myThrowable); } } diff --git a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/model/AccessLogDTO.java b/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/model/AccessLogDTO.java deleted file mode 100644 index cd84ab1c..00000000 --- a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/model/AccessLogDTO.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.hccake.ballcat.commom.log.access.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.time.LocalDateTime; - -/** - * @author Hccake - * @version 1.0 - * @date 2019/10/15 18:59 - */ -@Data -@Accessors(chain = true) -public class AccessLogDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 用户ID - */ - @ApiModelProperty(value = "用户ID") - private String userId; - /** - * 用户名 - */ - @ApiModelProperty(value = "用户名") - private String username; - /** - * 请求方式 - */ - @ApiModelProperty(value = "请求方式") - private String method; - /** - * 请求URI - */ - @ApiModelProperty(value = "请求uri") - private String uri; - /** - * 操作IP地址 - */ - @ApiModelProperty(value = "操作ip地址") - private String ip; - /** - * 用户代理 - */ - @ApiModelProperty(value = "用户代理") - private String userAgent; - /** - * 请求参数 - */ - @ApiModelProperty(value = "请求参数") - private String reqParams; - /** - * 请求体 - */ - @ApiModelProperty(value = "请求体") - private String reqBody; - /** - * 请求时长 - */ - @ApiModelProperty(value = "请求时长") - private Long time; - /** - * 响应状态码 - */ - @ApiModelProperty(value = "响应状态码") - private Integer httpStatus; - /** - * 错误消息 - */ - @ApiModelProperty(value = "错误消息") - private String errorMsg; - /** - * 创建时间 - */ - @ApiModelProperty(value = "创建时间") - private LocalDateTime createTime; - -} diff --git a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/service/AccessLogHandlerService.java b/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/service/AccessLogHandlerService.java index 7cd53601..a72925fc 100644 --- a/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/service/AccessLogHandlerService.java +++ b/ballcat-common/ballcat-common-log/src/main/java/com/hccake/ballcat/commom/log/access/service/AccessLogHandlerService.java @@ -10,24 +10,35 @@ import javax.servlet.http.HttpServletResponse; */ public interface AccessLogHandlerService { + /** + * 记录日志 + * @param request + * @param response + * @param executionTime + * @param throwable + */ + default void logRecord(HttpServletRequest request, HttpServletResponse response, Long executionTime, Throwable throwable){ + T log = prodLog(request, response, executionTime, throwable); + saveLog(log); + } + /** * 生产一个日志 * @return accessLog * @param request * @param response - * @param time - * @param myThrowable + * @param executionTime + * @param throwable */ - T prodLog(HttpServletRequest request, HttpServletResponse response, Long time, Throwable myThrowable); + T prodLog(HttpServletRequest request, HttpServletResponse response, Long executionTime, Throwable throwable); /** - * 记录日志 + * 保存日志 + * 落库/或输出到文件等 * * @param accessLog */ void saveLog(T accessLog); - - } diff --git a/ballcat-common/ballcat-common-modules/src/main/java/com/hccake/ballcat/api/modules/api/model/entity/ApiAccessLog.java b/ballcat-common/ballcat-common-modules/src/main/java/com/hccake/ballcat/api/modules/api/model/entity/ApiAccessLog.java index 7e4fd1e5..386b5093 100644 --- a/ballcat-common/ballcat-common-modules/src/main/java/com/hccake/ballcat/api/modules/api/model/entity/ApiAccessLog.java +++ b/ballcat-common/ballcat-common-modules/src/main/java/com/hccake/ballcat/api/modules/api/model/entity/ApiAccessLog.java @@ -56,6 +56,11 @@ public class ApiAccessLog extends Model { */ @ApiModelProperty(value = "请求URI") private String uri; + /** + * 请求映射地址 + */ + @ApiModelProperty(value = "请求映射地址") + private String matchingPattern; /** * 操作方式 */ diff --git a/ballcat-monitor/pom.xml b/ballcat-monitor/pom.xml index e2ee99d6..734039ad 100644 --- a/ballcat-monitor/pom.xml +++ b/ballcat-monitor/pom.xml @@ -16,7 +16,6 @@ de.codecentric spring-boot-admin-starter-server - 2.1.6 diff --git a/pom.xml b/pom.xml index 8d8d6559..3966177b 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 1.8 1.8 - 2.1.8.RELEASE + 2.2.1.RELEASE Cairo-SR8 1.3.0.Final @@ -34,6 +34,7 @@ 0.0.4 1.5.2 2.1.0 + 2.2.0 2.3.6.RELEASE @@ -131,6 +132,18 @@ spring-security-oauth2 ${spring-security-oauth2.version} + + + de.codecentric + spring-boot-admin-starter-server + ${spring-boot-admin.version} + + + + de.codecentric + spring-boot-admin-starter-client + ${spring-boot-admin.version} + cn.hutool @@ -248,6 +261,12 @@ prod + + preview + + preview + +