Skip to content

Commit 178ca73

Browse files
committed
Fix Type Check
Issue gh-16536
1 parent ae82be7 commit 178ca73

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) t
229229
BeanDefinition filterChainProxy = registry
230230
.getBeanDefinition(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
231231

232-
if (filterChainProxy.getResolvableType().isAssignableFrom(CompositeFilterChainProxy.class)) {
232+
if (filterChainProxy.getResolvableType().isInstance(CompositeFilterChainProxy.class)) {
233233
return;
234234
}
235235

@@ -244,11 +244,6 @@ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) t
244244
.rootBeanDefinition(CompositeFilterChainProxy.class)
245245
.addConstructorArgValue(filters);
246246

247-
if (filterChainProxy.getResolvableType().isInstance(DebugFilter.class)) {
248-
compositeSpringSecurityFilterChainBldr = BeanDefinitionBuilder.rootBeanDefinition(DebugFilter.class)
249-
.addConstructorArgValue(compositeSpringSecurityFilterChainBldr.getBeanDefinition());
250-
}
251-
252247
registry.removeBeanDefinition(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
253248
registry.registerBeanDefinition(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME,
254249
compositeSpringSecurityFilterChainBldr.getBeanDefinition());
@@ -308,6 +303,7 @@ static class CompositeFilterChainProxy extends FilterChainProxy {
308303
* @param filters the Filters to delegate to. One of which must be
309304
* FilterChainProxy.
310305
*/
306+
@Autowired
311307
CompositeFilterChainProxy(List<? extends Filter> filters) {
312308
this.doFilterDelegate = createDoFilterDelegate(filters);
313309
this.springSecurityFilterChain = findFilterChainProxy(filters);
@@ -403,7 +399,7 @@ private static FilterChainProxy findFilterChainProxy(List<? extends Filter> filt
403399
return fcp;
404400
}
405401
if (filter instanceof DebugFilter debugFilter) {
406-
return new CompositeFilterChainProxy(debugFilter, debugFilter.getFilterChainProxy());
402+
return debugFilter.getFilterChainProxy();
407403
}
408404
}
409405
throw new IllegalStateException("Couldn't find FilterChainProxy in " + filters);

config/src/test/java/org/springframework/security/config/annotation/web/configuration/EnableWebSecurityTests.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@
1616

1717
package org.springframework.security.config.annotation.web.configuration;
1818

19+
import ch.qos.logback.classic.Level;
20+
import ch.qos.logback.classic.Logger;
21+
import ch.qos.logback.classic.spi.ILoggingEvent;
22+
import ch.qos.logback.core.Appender;
1923
import org.junit.jupiter.api.Test;
2024
import org.junit.jupiter.api.extension.ExtendWith;
25+
import org.slf4j.LoggerFactory;
2126

2227
import org.springframework.beans.factory.annotation.Autowired;
2328
import org.springframework.context.annotation.Bean;
@@ -28,14 +33,17 @@
2833
import org.springframework.security.config.test.SpringTestContextExtension;
2934
import org.springframework.security.core.annotation.AuthenticationPrincipal;
3035
import org.springframework.security.web.SecurityFilterChain;
31-
import org.springframework.security.web.debug.DebugFilter;
3236
import org.springframework.test.web.servlet.MockMvc;
3337
import org.springframework.web.bind.annotation.GetMapping;
3438
import org.springframework.web.bind.annotation.RestController;
3539
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
3640

3741
import static org.assertj.core.api.Assertions.assertThat;
3842
import static org.assertj.core.api.Assertions.assertThatNoException;
43+
import static org.mockito.ArgumentMatchers.any;
44+
import static org.mockito.Mockito.atLeastOnce;
45+
import static org.mockito.Mockito.mock;
46+
import static org.mockito.Mockito.verify;
3947
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
4048
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
4149
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
@@ -52,9 +60,19 @@ public class EnableWebSecurityTests {
5260
private MockMvc mockMvc;
5361

5462
@Test
55-
public void loadConfigWhenChildConfigExtendsSecurityConfigThenSecurityConfigInherited() {
63+
public void loadConfigWhenChildConfigExtendsSecurityConfigThenSecurityConfigInherited() throws Exception {
64+
Appender<ILoggingEvent> appender = mockAppenderFor("Spring Security Debugger");
5665
this.spring.register(ChildSecurityConfig.class).autowire();
57-
this.spring.getContext().getBean("springSecurityFilterChain", DebugFilter.class);
66+
this.mockMvc.perform(get("/"));
67+
verify(appender, atLeastOnce()).doAppend(any(ILoggingEvent.class));
68+
}
69+
70+
private Appender<ILoggingEvent> mockAppenderFor(String name) {
71+
Appender<ILoggingEvent> appender = mock(Appender.class);
72+
Logger logger = (Logger) LoggerFactory.getLogger(name);
73+
logger.setLevel(Level.DEBUG);
74+
logger.addAppender(appender);
75+
return appender;
5876
}
5977

6078
// gh-14370

config/src/test/java/org/springframework/security/config/annotation/web/configurers/NamespaceDebugTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public void requestWhenDebugSetToTrueThenLogsDebugInformation() throws Exception
5959
Appender<ILoggingEvent> appender = mockAppenderFor("Spring Security Debugger");
6060
this.spring.register(DebugWebSecurity.class).autowire();
6161
this.mvc.perform(get("/"));
62-
assertThat(filterChainClass()).isEqualTo(DebugFilter.class);
6362
verify(appender, atLeastOnce()).doAppend(any(ILoggingEvent.class));
6463
}
6564

0 commit comments

Comments
 (0)