From 96e950cb0092a832c6a03c9e4d063bd71f4aea0b Mon Sep 17 00:00:00 2001 From: 13009 Date: Wed, 20 Mar 2024 09:33:17 +0800 Subject: [PATCH] logger --- .../czcb/scfs/api/core/cipher/DefaultValidator.java | 9 +++++---- .../com/czcb/scfs/api/core/http/HttpLogger.java | 13 ++++++++++--- .../java/com/czcb/scfs/api/core/util/Strings.java | 8 ++++++++ .../com/czcb/scfs/api/core/util/StringsTest.java | 9 +++++++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java index afc3a1c..7333f1d 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/cipher/DefaultValidator.java @@ -44,11 +44,11 @@ public final class DefaultValidator implements Validator { Instant responseTime = Instant.ofEpochSecond(Long.parseLong(timestamp)); // 拒绝过期请求 if (Duration.between(responseTime, Instant.now()).abs().toMinutes() >= RESPONSE_EXPIRED_MINUTES) { - throw new TimestampException(String.format("响应校验失败, 响应头[%s=%s]已过期, Request-Id[%s]", TIMESTAMP, + throw new TimestampException(String.format("响应校验失败, 响应头[%s=%s]已过期, Request-Id=%s", TIMESTAMP, timestamp, response.getHttpHeaders().getHeader(REQUEST_ID))); } } catch (Exception e) { - throw new TimestampException(String.format("响应校验失败, 响应头[%s=%s]无效, Request-Id[%s]", TIMESTAMP, + throw new TimestampException(String.format("响应校验失败, 响应头[%s=%s]无效, Request-Id=%s", TIMESTAMP, timestamp, response.getHttpHeaders().getHeader(REQUEST_ID))); } } @@ -73,11 +73,12 @@ public final class DefaultValidator implements Validator { } if (!verifier.verify(null, message, signature)) { - throw new ValidationException(String.format("响应校验失败, 签名校验未通过, Request-Id[%s]", + httpLogger.logResponseError(response); + throw new ValidationException(String.format("响应校验失败, 签名校验未通过, Request-Id=%s", response.getHttpHeaders().getHeader(REQUEST_ID))); } } catch (Exception e) { - throw new ValidationException(String.format("响应校验失败, 签名校验异常, Request-Id[%s]", + throw new ValidationException(String.format("响应校验失败, 签名校验异常, Request-Id=%s", response.getHttpHeaders().getHeader(REQUEST_ID)), e); } } diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/HttpLogger.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/HttpLogger.java index 4cbf46e..53ee040 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/HttpLogger.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/http/HttpLogger.java @@ -29,7 +29,10 @@ public class HttpLogger { } logger.info("请求行:{} {} {}", request.getHttpMethod(), request.getUrl(), httpVersion); - request.getHttpHeaders().getHeaders().forEach((k, v) -> logger.info("请求头:{}={}", k, v)); + + StringBuilder sb = new StringBuilder(); + request.getHttpHeaders().getHeaders().forEach((k, v) -> sb.append(k).append("=").append(v).append(";")); + logger.info("请求头:{}", Strings.removeSuffix(sb.toString(), ";")); if (request.getRequestBody() instanceof EncryptRequestBody) { EncryptRequestBody body = (EncryptRequestBody) request.getRequestBody(); @@ -55,7 +58,9 @@ public class HttpLogger { } logger.info("响应行:{} {}", originalResponse.getVersion(), originalResponse.getStatusCode()); - response.getHttpHeaders().getHeaders().forEach((k, v) -> logger.info("响应头:{}={}", k, v)); + StringBuilder sb = new StringBuilder(); + response.getHttpHeaders().getHeaders().forEach((k, v) -> sb.append(k).append("=").append(v).append(";")); + logger.info("响应头:{}", Strings.removeSuffix(sb.toString(), ";")); logger.info("响应原始报文:{}", Strings.toStr(response.getOriginalBody())); logger.info("响应解密报文:{}", Json.toJson(response.getServiceResponse())); @@ -69,7 +74,9 @@ public class HttpLogger { */ public void logResponseError(OriginalResponse originalResponse) { logger.info("响应:{} {}", originalResponse.getVersion(), originalResponse.getStatusCode()); - originalResponse.getHttpHeaders().getHeaders().forEach((k, v) -> logger.info("响应头:{}={}", k, v)); + StringBuilder sb = new StringBuilder(); + originalResponse.getHttpHeaders().getHeaders().forEach((k, v) -> sb.append(k).append("=").append(v).append(";")); + logger.info("响应头:{}", Strings.removeSuffix(sb.toString(), ";")); logger.info("响应原始报文:{}", Strings.toStr((originalResponse.getBody()))); } } diff --git a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/util/Strings.java b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/util/Strings.java index f470d12..3818c7c 100644 --- a/scfs-api-core/src/main/java/com/czcb/scfs/api/core/util/Strings.java +++ b/scfs-api-core/src/main/java/com/czcb/scfs/api/core/util/Strings.java @@ -35,6 +35,14 @@ public class Strings { return new String(bytes, StandardCharsets.UTF_8); } + public static String removeSuffix(String text, String suffix) { + if (isEmpty(text) || isEmpty(suffix)) { + return ""; + } + + return text.substring(0, text.length() - suffix.length()); + } + public static byte[] toBytes(String text) { return text.getBytes(StandardCharsets.UTF_8); } diff --git a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java index 01fec0b..596f94f 100644 --- a/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java +++ b/scfs-api-core/src/test/java/com/czcb/scfs/api/core/util/StringsTest.java @@ -61,4 +61,13 @@ class StringsTest { Assertions.assertEquals("https%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3Dutf-8", Strings.urlEncode(url)); assertThrows(EncodingException.class, () -> Strings.urlEncode(null)); } + + @Test + void removeSuffix() { + Assertions.assertEquals("", Strings.removeSuffix("", "")); + Assertions.assertEquals("", Strings.removeSuffix(null, "")); + Assertions.assertEquals("", Strings.removeSuffix("", null)); + Assertions.assertEquals("123", Strings.removeSuffix("123;", ";")); + Assertions.assertEquals("", Strings.removeSuffix("123;", null)); + } } \ No newline at end of file