From a77bc1a099f9e2bfa89d2879de1849037d885e7b Mon Sep 17 00:00:00 2001 From: lbw Date: Sun, 21 Aug 2022 11:40:15 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=99=BB=E5=BD=95=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PigxAuthenticationFailureLogEventHandler.java | 9 +++++++++ .../handler/PigxAuthenticationLogoutEventHandler.java | 9 +++++++++ .../PigxAuthenticationSuccessLogEventHandler.java | 10 ++++++++++ .../pigx/common/core/constant/CommonConstants.java | 5 +++++ .../configuration/GlobalExceptionConfiguration.java | 3 ++- .../pigx/gateway/filter/PigxRequestGlobalFilter.java | 10 ++++++++-- .../service/impl/GenDatasourceConfServiceImpl.java | 10 ++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureLogEventHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureLogEventHandler.java index f27f52915..3f9c5ffce 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureLogEventHandler.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationFailureLogEventHandler.java @@ -17,8 +17,10 @@ package com.pig4cloud.pigx.auth.handler; +import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.admin.api.dto.SysLogDTO; import com.pig4cloud.pigx.admin.api.feign.RemoteLogService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.KeyStrResolver; import com.pig4cloud.pigx.common.core.util.WebUtils; @@ -65,6 +67,13 @@ public class PigxAuthenticationFailureLogEventHandler implements AuthenticationF HttpServletRequest request, HttpServletResponse response) { String username = authentication.getName(); SysLogDTO sysLog = SysLogUtils.getSysLog(request, username); + + String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME); + if (StrUtil.isNotBlank(startTimeStr)) { + Long startTime = Long.parseLong(startTimeStr); + Long endTime = System.currentTimeMillis(); + sysLog.setTime(endTime - startTime); + } sysLog.setTitle(username + "用户登录"); sysLog.setLogType(LogTypeEnum.ERROR.getType()); sysLog.setParams(username); diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationLogoutEventHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationLogoutEventHandler.java index 2d1338b5a..dacdf585c 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationLogoutEventHandler.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationLogoutEventHandler.java @@ -17,8 +17,10 @@ package com.pig4cloud.pigx.auth.handler; +import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.admin.api.dto.SysLogDTO; import com.pig4cloud.pigx.admin.api.feign.RemoteLogService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.log.util.SysLogUtils; import com.pig4cloud.pigx.common.security.handler.AuthenticationLogoutHandler; @@ -64,6 +66,13 @@ public class PigxAuthenticationLogoutEventHandler implements AuthenticationLogou sysLog.setTitle(pigxUser.getUsername() + "用户登录"); sysLog.setParams(pigxUser.getUsername()); + String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME); + if (StrUtil.isNotBlank(startTimeStr)) { + Long startTime = Long.parseLong(startTimeStr); + Long endTime = System.currentTimeMillis(); + sysLog.setTime(endTime - startTime); + } + // 获取clientId 信息 OAuth2Authentication auth2Authentication = (OAuth2Authentication) authentication; sysLog.setServiceId(auth2Authentication.getOAuth2Request().getClientId()); diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessLogEventHandler.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessLogEventHandler.java index d4d804500..b7706fecd 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessLogEventHandler.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/handler/PigxAuthenticationSuccessLogEventHandler.java @@ -17,8 +17,10 @@ package com.pig4cloud.pigx.auth.handler; +import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.admin.api.dto.SysLogDTO; import com.pig4cloud.pigx.admin.api.feign.RemoteLogService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.KeyStrResolver; import com.pig4cloud.pigx.common.core.util.WebUtils; @@ -64,6 +66,14 @@ public class PigxAuthenticationSuccessLogEventHandler implements AuthenticationS SysLogDTO sysLog = SysLogUtils.getSysLog(request, username); sysLog.setTitle(username + "用户登录"); sysLog.setParams(username); + + String startTimeStr = request.getHeader(CommonConstants.REQUEST_START_TIME); + if (StrUtil.isNotBlank(startTimeStr)) { + Long startTime = Long.parseLong(startTimeStr); + Long endTime = System.currentTimeMillis(); + sysLog.setTime(endTime - startTime); + } + String header = request.getHeader(HttpHeaders.AUTHORIZATION); sysLog.setServiceId(WebUtils.extractClientId(header).orElse("N/A")); sysLog.setTenantId(Long.parseLong(tenantKeyStrResolver.key())); diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java index 987337d68..febfe9178 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java @@ -120,4 +120,9 @@ public interface CommonConstants { */ String ONLINE_QUANTITY = "online_quantity"; + /** + * 请求开始时间 + */ + String REQUEST_START_TIME = "REQUEST-START-TIME"; + } diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GlobalExceptionConfiguration.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GlobalExceptionConfiguration.java index 24579ee19..c007c687c 100644 --- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GlobalExceptionConfiguration.java +++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/configuration/GlobalExceptionConfiguration.java @@ -46,7 +46,8 @@ public class GlobalExceptionConfiguration implements ErrorWebExceptionHandler { return response.writeWith(Mono.fromSupplier(() -> { DataBufferFactory bufferFactory = response.bufferFactory(); try { - log.error("Error Spring Cloud Gateway : {}", ex.getMessage()); + log.error("Error rquest :{} Error Spring Cloud Gateway : {}", exchange.getRequest().getPath(), + ex.getMessage()); return bufferFactory.wrap(objectMapper.writeValueAsBytes(R.failed(ex.getMessage()))); } catch (JsonProcessingException e) { diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java index e3574325f..8fce581ac 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/PigxRequestGlobalFilter.java @@ -17,6 +17,7 @@ package com.pig4cloud.pigx.gateway.filter; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; @@ -28,6 +29,7 @@ import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import java.util.Arrays; +import java.util.Collections; import java.util.stream.Collectors; import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR; @@ -56,8 +58,12 @@ public class PigxRequestGlobalFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 1. 清洗请求头中from 参数 - ServerHttpRequest request = exchange.getRequest().mutate() - .headers(httpHeaders -> httpHeaders.remove(SecurityConstants.FROM)).build(); + ServerHttpRequest request = exchange.getRequest().mutate().headers(httpHeaders -> { + httpHeaders.remove(SecurityConstants.FROM); + // 设置请求时间 + httpHeaders.put(CommonConstants.REQUEST_START_TIME, + Collections.singletonList(String.valueOf(System.currentTimeMillis()))); + }).build(); // 2. 重写StripPrefix addOriginalRequestUrl(exchange, request.getURI()); diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/GenDatasourceConfServiceImpl.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/GenDatasourceConfServiceImpl.java index 2147a3af7..a3db4a478 100755 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/GenDatasourceConfServiceImpl.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/GenDatasourceConfServiceImpl.java @@ -22,6 +22,7 @@ import com.baomidou.dynamic.datasource.creator.DataSourceCreator; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.pig4cloud.pigx.codegen.config.MagicApiConfiguration; import com.pig4cloud.pigx.codegen.entity.GenDatasourceConf; import com.pig4cloud.pigx.codegen.mapper.GenDatasourceConfMapper; import com.pig4cloud.pigx.codegen.service.GenDatasourceConfService; @@ -54,6 +55,8 @@ public class GenDatasourceConfServiceImpl extends ServiceImpl