From 6b6a01a7e7063963b3df97c51586a2cd67aeab1d Mon Sep 17 00:00:00 2001 From: nklmish Date: Tue, 12 Dec 2017 00:41:45 +0100 Subject: [PATCH 1/2] Handle null Principal in AuditEvent See gh-11320 --- .../springframework/boot/actuate/audit/AuditEvent.java | 4 ++-- .../boot/actuate/audit/AuditEventTests.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java index ae96349f10e..f8cda87f7ee 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java @@ -41,6 +41,7 @@ import org.springframework.util.Assert; * (wrappers for AuditEvent). * * @author Dave Syer + * @author Nakul Mishra * @see AuditEventRepository */ @JsonInclude(Include.NON_EMPTY) @@ -85,10 +86,9 @@ public class AuditEvent implements Serializable { public AuditEvent(Date timestamp, String principal, String type, Map data) { Assert.notNull(timestamp, "Timestamp must not be null"); - Assert.notNull(principal, "Principal must not be null"); Assert.notNull(type, "Type must not be null"); this.timestamp = timestamp; - this.principal = principal; + this.principal = principal != null ? principal : ""; this.type = type; this.data = Collections.unmodifiableMap(data); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java index cbe594722f4..3d46a901065 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java @@ -32,6 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Dave Syer * @author Vedran Pavic + * @author Nakul Mishra */ public class AuditEventTests { @@ -64,10 +65,9 @@ public class AuditEventTests { } @Test - public void nullPrincipal() throws Exception { - this.thrown.expect(IllegalArgumentException.class); - this.thrown.expectMessage("Principal must not be null"); - new AuditEvent(null, "UNKNOWN", Collections.singletonMap("a", (Object) "b")); + public void nullPrincipal() { + AuditEvent auditEvent = new AuditEvent(null, "UNKNOWN", Collections.singletonMap("a", (Object) "b")); + assertThat(auditEvent.getPrincipal()).isEmpty(); } @Test From 7fb0bd77cd7962dbe69cc896b63494d55dca73d6 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 12 Dec 2017 08:45:20 +0100 Subject: [PATCH 2/2] Polish "Handle null Principal in AuditEvent" Closes gh-11320 --- .../boot/actuate/audit/AuditEvent.java | 4 ++-- .../boot/actuate/audit/AuditEventTests.java | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java index f8cda87f7ee..a7b6ee21a0a 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEvent.java @@ -41,7 +41,6 @@ import org.springframework.util.Assert; * (wrappers for AuditEvent). * * @author Dave Syer - * @author Nakul Mishra * @see AuditEventRepository */ @JsonInclude(Include.NON_EMPTY) @@ -117,7 +116,8 @@ public class AuditEvent implements Serializable { } /** - * Returns the user principal responsible for the event. + * Returns the user principal responsible for the event or an empty String if the + * principal is not available. * @return the principal */ public String getPrincipal() { diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java index 3d46a901065..b13e0bb4707 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/audit/AuditEventTests.java @@ -32,7 +32,6 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Dave Syer * @author Vedran Pavic - * @author Nakul Mishra */ public class AuditEventTests { @@ -56,6 +55,13 @@ public class AuditEventTests { assertThat(event.getData().get("c")).isEqualTo("d"); } + @Test + public void nullPrincipalIsMappedToEmptyString() { + AuditEvent auditEvent = new AuditEvent(null, "UNKNOWN", + Collections.singletonMap("a", (Object) "b")); + assertThat(auditEvent.getPrincipal()).isEmpty(); + } + @Test public void nullTimestamp() throws Exception { this.thrown.expect(IllegalArgumentException.class); @@ -64,12 +70,6 @@ public class AuditEventTests { Collections.singletonMap("a", (Object) "b")); } - @Test - public void nullPrincipal() { - AuditEvent auditEvent = new AuditEvent(null, "UNKNOWN", Collections.singletonMap("a", (Object) "b")); - assertThat(auditEvent.getPrincipal()).isEmpty(); - } - @Test public void nullType() throws Exception { this.thrown.expect(IllegalArgumentException.class);