diff --git a/server/skillhub-app/src/main/java/com/iflytek/skillhub/filter/RequestLoggingFilter.java b/server/skillhub-app/src/main/java/com/iflytek/skillhub/filter/RequestLoggingFilter.java index b1aabcc1..d435869e 100644 --- a/server/skillhub-app/src/main/java/com/iflytek/skillhub/filter/RequestLoggingFilter.java +++ b/server/skillhub-app/src/main/java/com/iflytek/skillhub/filter/RequestLoggingFilter.java @@ -37,7 +37,8 @@ public class RequestLoggingFilter extends OncePerRequestFilter { "/sse" ); private static final Set SENSITIVE_BODY_PREFIXES = Set.of( - "/api/v1/auth/" + "/api/v1/auth/", + "/api/v1/account/merge" ); private final SensitiveLogSanitizer sensitiveLogSanitizer; diff --git a/server/skillhub-app/src/test/java/com/iflytek/skillhub/filter/RequestLoggingFilterTest.java b/server/skillhub-app/src/test/java/com/iflytek/skillhub/filter/RequestLoggingFilterTest.java index 3a9c2942..0c37616e 100644 --- a/server/skillhub-app/src/test/java/com/iflytek/skillhub/filter/RequestLoggingFilterTest.java +++ b/server/skillhub-app/src/test/java/com/iflytek/skillhub/filter/RequestLoggingFilterTest.java @@ -16,6 +16,8 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -204,6 +206,43 @@ class RequestLoggingFilterTest { }); } + @ParameterizedTest + @ValueSource(strings = { + "/api/v1/account/merge/reauthenticate/local", + "/api/v1/account/merge/intents/merge-intent/secondary-auth/local", + "/api/v1/account/merge/verify" + }) + void doFilterInternal_omitsAccountMergeBody(String requestUri) + throws Exception { + RequestLoggingFilter filter = filter(); + attachAppender(); + MockHttpServletRequest request = + new MockHttpServletRequest("POST", requestUri); + request.setCharacterEncoding(StandardCharsets.UTF_8.name()); + request.setContentType(MediaType.APPLICATION_JSON_VALUE); + request.setContent( + """ + {"username":"secondary-user","password":"body-secret", + "verificationToken":"verification-secret"} + """.getBytes(StandardCharsets.UTF_8)); + MockHttpServletResponse response = + new MockHttpServletResponse(); + + filter.doFilter( + request, + response, + (req, res) -> req.getReader().lines().count()); + + assertThat(loggedMessages()).anySatisfy(message -> { + assertThat(message) + .contains("POST " + requestUri) + .doesNotContain("secondary-user") + .doesNotContain("body-secret") + .doesNotContain("verification-secret") + .doesNotContain("Body:"); + }); + } + private RequestLoggingFilter filter() { return new RequestLoggingFilter( new SensitiveLogSanitizer());