diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SanitizingFunction.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SanitizingFunction.java index bc47f686c87..d4c8e33f7e0 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SanitizingFunction.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/SanitizingFunction.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -80,7 +80,7 @@ public interface SanitizingFunction { * @see #sanitizeValue() */ default SanitizingFunction ifLikelySenstive() { - return ifLikelyCredential().ifLikelyUri().ifLikelySenstiveEnvironmentVariable().ifVcapServices(); + return ifLikelyCredential().ifLikelyUri().ifLikelySenstiveProperty().ifVcapServices(); } /** @@ -113,7 +113,7 @@ public interface SanitizingFunction { /** * Return a new function with a filter that also applies if the data is - * likely to sensitive environment variable value. This method can help construct a + * likely to contain a sensitive property value. This method can help construct a * useful sanitizing function, but may not catch all sensitive data so care should be * taken to test the results for your specific environment. * @return a new sanitizing function with an updated {@link #filter()} @@ -121,7 +121,7 @@ public interface SanitizingFunction { * @see #filter() * @see #sanitizeValue() */ - default SanitizingFunction ifLikelySenstiveEnvironmentVariable() { + default SanitizingFunction ifLikelySenstiveProperty() { return ifKeyMatches("sun.java.command", "^spring[._]application[._]json$"); } @@ -431,4 +431,18 @@ public interface SanitizingFunction { return SanitizableData::withSanitizedValue; } + /** + * Helper method that can be used working with a sanitizingFunction as a lambda. For + * example:
+	 * SanitizingFunction.of((data) -> data.withValue("----")).ifKeyContains("password");
+	 * 
+ * @param sanitizingFunction the sanitizing function lambda + * @return a {@link SanitizingFunction} for further method calls + * @since 3.5.0 + */ + static SanitizingFunction of(SanitizingFunction sanitizingFunction) { + Assert.notNull(sanitizingFunction, "'sanitizingFunction' must not be null"); + return sanitizingFunction; + } + } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SanitizingFunctionTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SanitizingFunctionTests.java index ba85c5bafee..4cd23f87fac 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SanitizingFunctionTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/SanitizingFunctionTests.java @@ -60,7 +60,7 @@ class SanitizingFunctionTests { void ifLikelySenstiveFiltersExpected() { SanitizingFunction function = SanitizingFunction.sanitizeValue().ifLikelySenstive(); assertThat(function).satisfies(this::likelyCredentialChecks, this::likelyUriChecks, - this::likelySenstiveEnvironmentVariableChecks, this::vcapServicesChecks); + this::likelySenstivePropertyChecks, this::vcapServicesChecks); } @Test @@ -101,12 +101,12 @@ class SanitizingFunctionTests { } @Test - void ifLikelySenstiveEnvironmentVariableFiltersExpected() { - SanitizingFunction function = SanitizingFunction.sanitizeValue().ifLikelySenstiveEnvironmentVariable(); - assertThat(function).satisfies(this::likelySenstiveEnvironmentVariableChecks); + void ifLikelySenstivePropertyFiltersExpected() { + SanitizingFunction function = SanitizingFunction.sanitizeValue().ifLikelySenstiveProperty(); + assertThat(function).satisfies(this::likelySenstivePropertyChecks); } - private void likelySenstiveEnvironmentVariableChecks(SanitizingFunction function) { + private void likelySenstivePropertyChecks(SanitizingFunction function) { assertThatApplyingToKey(function, "sun.java.command").has(sanitizedValue()); assertThatApplyingToKey(function, "spring.application.json").has(sanitizedValue()); assertThatApplyingToKey(function, "SPRING_APPLICATION_JSON").has(sanitizedValue()); @@ -305,6 +305,13 @@ class SanitizingFunctionTests { assertThatApplying(function, data("spring", null)).is(unsanitizedValue()); } + @Test + void ofAllowsChainingFromLambda() { + SanitizingFunction function = SanitizingFunction.of((data) -> data.withValue("----")).ifKeyContains("password"); + assertThat(function.applyUnlessFiltered(data("username", "spring")).getValue()).isEqualTo("spring"); + assertThat(function.applyUnlessFiltered(data("password", "boot")).getValue()).isEqualTo("----"); + } + private ObjectAssert assertThatApplyingToKey(SanitizingFunction function, String key) { return assertThatApplying(function, data(key)); }