Skip to content

Commit 8d933fc

Browse files
braunsonmjzheaux
authored andcommitted
Support Customizing Observation Conventions
Closes gh-12534
1 parent ff4e926 commit 8d933fc

8 files changed

+76
-4
lines changed

core/src/main/java/org/springframework/security/authentication/ObservationAuthenticationManager.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.security.authentication;
1818

1919
import io.micrometer.observation.Observation;
20+
import io.micrometer.observation.ObservationConvention;
2021
import io.micrometer.observation.ObservationRegistry;
2122

2223
import org.springframework.security.core.Authentication;
@@ -35,7 +36,7 @@ public final class ObservationAuthenticationManager implements AuthenticationMan
3536

3637
private final AuthenticationManager delegate;
3738

38-
private final AuthenticationObservationConvention convention = new AuthenticationObservationConvention();
39+
private ObservationConvention<AuthenticationObservationContext> convention = new AuthenticationObservationConvention();
3940

4041
public ObservationAuthenticationManager(ObservationRegistry registry, AuthenticationManager delegate) {
4142
Assert.notNull(registry, "observationRegistry cannot be null");
@@ -56,4 +57,15 @@ public Authentication authenticate(Authentication authentication) throws Authent
5657
});
5758
}
5859

60+
/**
61+
* Use the provided convention for reporting observation data
62+
*
63+
* @param convention The provided convention
64+
*
65+
* @since 6.1
66+
*/
67+
public void setConvention(ObservationConvention<AuthenticationObservationContext> convention) {
68+
Assert.notNull(convention, "The observation convention cannot be null");
69+
this.convention = convention;
70+
}
5971
}

core/src/main/java/org/springframework/security/authentication/ObservationReactiveAuthenticationManager.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package org.springframework.security.authentication;
1818

1919
import io.micrometer.observation.Observation;
20+
import io.micrometer.observation.ObservationConvention;
2021
import io.micrometer.observation.ObservationRegistry;
2122
import io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor;
23+
import org.springframework.util.Assert;
2224
import reactor.core.publisher.Mono;
2325

2426
import org.springframework.security.core.Authentication;
@@ -36,7 +38,7 @@ public class ObservationReactiveAuthenticationManager implements ReactiveAuthent
3638

3739
private final ReactiveAuthenticationManager delegate;
3840

39-
private final AuthenticationObservationConvention convention = new AuthenticationObservationConvention();
41+
private ObservationConvention<AuthenticationObservationContext> convention = new AuthenticationObservationConvention();
4042

4143
public ObservationReactiveAuthenticationManager(ObservationRegistry registry,
4244
ReactiveAuthenticationManager delegate) {
@@ -62,4 +64,15 @@ public Mono<Authentication> authenticate(Authentication authentication) throws A
6264
});
6365
}
6466

67+
/**
68+
* Use the provided convention for reporting observation data
69+
*
70+
* @param convention The provided convention
71+
*
72+
* @since 6.1
73+
*/
74+
public void setConvention(ObservationConvention<AuthenticationObservationContext> convention) {
75+
Assert.notNull(convention, "The observation convention cannot be null");
76+
this.convention = convention;
77+
}
6578
}

core/src/main/java/org/springframework/security/authorization/ObservationAuthorizationManager.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import java.util.function.Supplier;
2020

2121
import io.micrometer.observation.Observation;
22+
import io.micrometer.observation.ObservationConvention;
2223
import io.micrometer.observation.ObservationRegistry;
2324

2425
import org.springframework.security.access.AccessDeniedException;
2526
import org.springframework.security.core.Authentication;
27+
import org.springframework.util.Assert;
2628

2729
/**
2830
* An {@link AuthorizationManager} that observes the authorization
@@ -36,7 +38,7 @@ public final class ObservationAuthorizationManager<T> implements AuthorizationMa
3638

3739
private final AuthorizationManager<T> delegate;
3840

39-
private final AuthorizationObservationConvention convention = new AuthorizationObservationConvention();
41+
private ObservationConvention<AuthorizationObservationContext<?>> convention = new AuthorizationObservationConvention();
4042

4143
public ObservationAuthorizationManager(ObservationRegistry registry, AuthorizationManager<T> delegate) {
4244
this.registry = registry;
@@ -68,4 +70,15 @@ public AuthorizationDecision check(Supplier<Authentication> authentication, T ob
6870
}
6971
}
7072

73+
/**
74+
* Use the provided convention for reporting observation data
75+
*
76+
* @param convention The provided convention
77+
*
78+
* @since 6.1
79+
*/
80+
public void setConvention(ObservationConvention<AuthorizationObservationContext<?>> convention) {
81+
Assert.notNull(convention, "The observation convention cannot be null");
82+
this.convention = convention;
83+
}
7184
}

core/src/main/java/org/springframework/security/authorization/ObservationReactiveAuthorizationManager.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package org.springframework.security.authorization;
1818

1919
import io.micrometer.observation.Observation;
20+
import io.micrometer.observation.ObservationConvention;
2021
import io.micrometer.observation.ObservationRegistry;
2122
import io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor;
23+
import org.springframework.util.Assert;
2224
import reactor.core.publisher.Mono;
2325

2426
import org.springframework.security.access.AccessDeniedException;
@@ -36,7 +38,7 @@ public final class ObservationReactiveAuthorizationManager<T> implements Reactiv
3638

3739
private final ReactiveAuthorizationManager<T> delegate;
3840

39-
private final AuthorizationObservationConvention convention = new AuthorizationObservationConvention();
41+
private ObservationConvention<AuthorizationObservationContext<?>> convention = new AuthorizationObservationConvention();
4042

4143
public ObservationReactiveAuthorizationManager(ObservationRegistry registry,
4244
ReactiveAuthorizationManager<T> delegate) {
@@ -67,4 +69,15 @@ public Mono<AuthorizationDecision> check(Mono<Authentication> authentication, T
6769
});
6870
}
6971

72+
/**
73+
* Use the provided convention for reporting observation data
74+
*
75+
* @param convention The provided convention
76+
*
77+
* @since 6.1
78+
*/
79+
public void setConvention(ObservationConvention<AuthorizationObservationContext<?>> convention) {
80+
Assert.notNull(convention, "The observation convention cannot be null");
81+
this.convention = convention;
82+
}
7083
}

core/src/test/java/org/springframework/security/authentication/ObservationAuthenticationManagerTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,9 @@ void authenticationWhenErrorsThenObserves() {
9393
assertThat(context.getAuthenticationResult()).isNull();
9494
}
9595

96+
@Test
97+
void conventionSetterThrowsWhenNull() {
98+
assertThatExceptionOfType(IllegalArgumentException.class)
99+
.isThrownBy(() -> this.tested.setConvention(null));
100+
}
96101
}

core/src/test/java/org/springframework/security/authentication/ObservationReactiveAuthenticationManagerTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,10 @@ void authenticationWhenErrorsThenObserves() {
9696
assertThat(context.getAuthenticationResult()).isNull();
9797
}
9898

99+
@Test
100+
void conventionSetterThrowsWhenNull() {
101+
assertThatExceptionOfType(IllegalArgumentException.class)
102+
.isThrownBy(() -> this.tested.setConvention(null));
103+
}
104+
99105
}

core/src/test/java/org/springframework/security/authorization/ObservationAuthorizationManagerTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,9 @@ void verifyWhenLooksUpAuthenticationThenObserves() {
118118
assertThat(context.getDecision()).isEqualTo(this.grant);
119119
}
120120

121+
@Test
122+
void conventionSetterThrowsWhenNull() {
123+
assertThatExceptionOfType(IllegalArgumentException.class)
124+
.isThrownBy(() -> this.tested.setConvention(null));
125+
}
121126
}

core/src/test/java/org/springframework/security/authorization/ObservationReactiveAuthorizationManagerTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,9 @@ void verifyWhenLooksUpAuthenticationThenObserves() {
117117
assertThat(context.getDecision()).isEqualTo(this.grant);
118118
}
119119

120+
@Test
121+
void conventionSetterThrowsWhenNull() {
122+
assertThatExceptionOfType(IllegalArgumentException.class)
123+
.isThrownBy(() -> this.tested.setConvention(null));
124+
}
120125
}

0 commit comments

Comments
 (0)