Skip to content

Commit f3ce04e

Browse files
committed
Merge branch '6.0.x'
Closes gh-12493
2 parents 1bbbd04 + c308e46 commit f3ce04e

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

web/src/main/java/org/springframework/security/web/ObservationFilterChainDecorator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -182,15 +182,15 @@ private void wrapFilter(ServletRequest request, ServletResponse response, Filter
182182
parentBefore.setFilterName(this.name);
183183
parentBefore.setChainPosition(this.position);
184184
}
185-
parent.before().event(Observation.Event.of(this.name + " before"));
185+
parent.before().event(Observation.Event.of(this.name + ".before", "before " + this.name));
186186
this.filter.doFilter(request, response, chain);
187187
parent.start();
188188
if (parent.after().getContext() instanceof FilterChainObservationContext parentAfter) {
189189
parentAfter.setChainSize(this.size);
190190
parentAfter.setFilterName(this.name);
191191
parentAfter.setChainPosition(this.size - this.position + 1);
192192
}
193-
parent.after().event(Observation.Event.of(this.name + " after"));
193+
parent.after().event(Observation.Event.of(this.name + ".after", "after " + this.name));
194194
}
195195

196196
private AroundFilterObservation parent(HttpServletRequest request) {

web/src/test/java/org/springframework/security/web/ObservationFilterChainDecoratorTests.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,17 +16,24 @@
1616

1717
package org.springframework.security.web;
1818

19+
import java.util.List;
20+
21+
import io.micrometer.observation.Observation;
1922
import io.micrometer.observation.ObservationHandler;
2023
import io.micrometer.observation.ObservationRegistry;
24+
import jakarta.servlet.Filter;
2125
import jakarta.servlet.FilterChain;
2226
import org.junit.jupiter.api.Test;
27+
import org.mockito.ArgumentCaptor;
2328

2429
import org.springframework.mock.web.MockHttpServletRequest;
2530
import org.springframework.mock.web.MockHttpServletResponse;
2631

32+
import static org.assertj.core.api.Assertions.assertThat;
2733
import static org.mockito.ArgumentMatchers.any;
2834
import static org.mockito.BDDMockito.given;
2935
import static org.mockito.Mockito.mock;
36+
import static org.mockito.Mockito.times;
3037
import static org.mockito.Mockito.verify;
3138
import static org.mockito.Mockito.verifyNoInteractions;
3239

@@ -61,4 +68,23 @@ void decorateWhenNoopThenDoesNotObserve() throws Exception {
6168
verifyNoInteractions(handler);
6269
}
6370

71+
@Test
72+
void decorateFiltersWhenDefaultsThenObserves() throws Exception {
73+
ObservationHandler<?> handler = mock(ObservationHandler.class);
74+
given(handler.supportsContext(any())).willReturn(true);
75+
ObservationRegistry registry = ObservationRegistry.create();
76+
registry.observationConfig().observationHandler(handler);
77+
ObservationFilterChainDecorator decorator = new ObservationFilterChainDecorator(registry);
78+
FilterChain chain = mock(FilterChain.class);
79+
Filter filter = mock(Filter.class);
80+
FilterChain decorated = decorator.decorate(chain, List.of(filter));
81+
decorated.doFilter(new MockHttpServletRequest("GET", "/"), new MockHttpServletResponse());
82+
verify(handler, times(2)).onStart(any());
83+
ArgumentCaptor<Observation.Event> event = ArgumentCaptor.forClass(Observation.Event.class);
84+
verify(handler, times(2)).onEvent(event.capture(), any());
85+
List<Observation.Event> events = event.getAllValues();
86+
assertThat(events.get(0).getName()).isEqualTo(filter.getClass().getSimpleName() + ".before");
87+
assertThat(events.get(1).getName()).isEqualTo(filter.getClass().getSimpleName() + ".after");
88+
}
89+
6490
}

0 commit comments

Comments
 (0)