2020import java .util .List ;
2121import java .util .ListIterator ;
2222
23- import io .micrometer .common .KeyValue ;
24- import io .micrometer .common .KeyValues ;
25- import io .micrometer .observation .Observation ;
26- import io .micrometer .observation .ObservationConvention ;
27- import io .micrometer .observation .ObservationRegistry ;
28- import io .micrometer .observation .contextpropagation .ObservationThreadLocalAccessor ;
29- import org .jspecify .annotations .NullUnmarked ;
3023import org .jspecify .annotations .Nullable ;
31- import reactor .core .publisher .Mono ;
32-
3324import org .springframework .util .Assert ;
3425import org .springframework .util .StringUtils ;
3526import org .springframework .web .server .ServerWebExchange ;
3627import org .springframework .web .server .WebFilter ;
3728import org .springframework .web .server .WebFilterChain ;
3829import org .springframework .web .server .WebHandler ;
3930
31+ import io .micrometer .common .KeyValue ;
32+ import io .micrometer .common .KeyValues ;
33+ import io .micrometer .observation .Observation ;
34+ import io .micrometer .observation .ObservationConvention ;
35+ import io .micrometer .observation .ObservationRegistry ;
36+ import io .micrometer .observation .contextpropagation .ObservationThreadLocalAccessor ;
37+ import reactor .core .publisher .Mono ;
38+
4039/**
4140 * A
4241 * {@link org.springframework.security.web.server.WebFilterChainProxy.WebFilterChainDecorator}
4544 * @author Josh Cummings
4645 * @since 6.0
4746 */
48- @ NullUnmarked // https://github.com/spring-projects/spring-security/issues/17815
4947public final class ObservationWebFilterChainDecorator implements WebFilterChainProxy .WebFilterChainDecorator {
5048
5149 private static final String ATTRIBUTE = ObservationWebFilterChainDecorator .class + ".observation" ;
@@ -70,8 +68,9 @@ public WebFilterChain decorate(WebFilterChain original, List<WebFilter> filters)
7068 return new ObservationWebFilterChain (wrapSecured (original )::filter , wrap (filters ));
7169 }
7270
73- private static @ Nullable AroundWebFilterObservation observation (ServerWebExchange exchange ) {
74- return exchange .getAttribute (ATTRIBUTE );
71+ private static AroundWebFilterObservation observation (ServerWebExchange exchange ) {
72+ AroundWebFilterObservation observation = exchange .getAttribute (ATTRIBUTE );
73+ return (observation != null ) ? observation : AroundWebFilterObservation .NOOP ;
7574 }
7675
7776 private WebFilterChain wrapSecured (WebFilterChain original ) {
@@ -218,7 +217,7 @@ private Mono<Void> wrapFilter(ServerWebExchange exchange, WebFilterChain chain)
218217 });
219218 }
220219
221- private AroundWebFilterObservation parent (ServerWebExchange exchange , Observation parentObservation ) {
220+ private AroundWebFilterObservation parent (ServerWebExchange exchange , @ Nullable Observation parentObservation ) {
222221 WebFilterChainObservationContext beforeContext = WebFilterChainObservationContext .before ();
223222 WebFilterChainObservationContext afterContext = WebFilterChainObservationContext .after ();
224223 Observation before = Observation .createNotStarted (this .convention , () -> beforeContext , this .registry )
@@ -575,7 +574,7 @@ static final class WebFilterChainObservationContext extends Observation.Context
575574
576575 private final String filterSection ;
577576
578- private @ Nullable String filterName ;
577+ @ Nullable private String filterName ;
579578
580579 private int chainPosition ;
581580
0 commit comments