|
@@ -1,5 +1,5 @@
|
|
/*
|
|
/*
|
|
- * Copyright 2002-2024 the original author or authors.
|
|
|
|
|
|
+ * Copyright 2002-2025 the original author or authors.
|
|
*
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* you may not use this file except in compliance with the License.
|
|
@@ -27,8 +27,10 @@ import jakarta.servlet.http.HttpServletRequest;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
|
|
|
|
|
|
+import org.springframework.beans.BeansException;
|
|
import org.springframework.beans.factory.BeanCreationException;
|
|
import org.springframework.beans.factory.BeanCreationException;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.beans.factory.config.BeanPostProcessor;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Import;
|
|
import org.springframework.context.annotation.Import;
|
|
@@ -326,6 +328,12 @@ public class WebSecurityConfigurationTests {
|
|
.isInstanceOf(IllegalArgumentException.class);
|
|
.isInstanceOf(IllegalArgumentException.class);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
+ public void avoidUnnecessaryHttpSecurityInstantiationWhenProvideOneSecurityFilterChain() {
|
|
|
|
+ this.spring.register(SecurityFilterChainConfig.class).autowire();
|
|
|
|
+ assertThat(this.spring.getContext().getBean(CustomBeanPostProcessor.class).instantiationCount).isEqualTo(1);
|
|
|
|
+ }
|
|
|
|
+
|
|
private void assertAnotherUserPermission(WebInvocationPrivilegeEvaluator privilegeEvaluator) {
|
|
private void assertAnotherUserPermission(WebInvocationPrivilegeEvaluator privilegeEvaluator) {
|
|
Authentication anotherUser = new TestingAuthenticationToken("anotherUser", "password", "ROLE_ANOTHER");
|
|
Authentication anotherUser = new TestingAuthenticationToken("anotherUser", "password", "ROLE_ANOTHER");
|
|
assertThat(privilegeEvaluator.isAllowed("/user", anotherUser)).isFalse();
|
|
assertThat(privilegeEvaluator.isAllowed("/user", anotherUser)).isFalse();
|
|
@@ -347,6 +355,32 @@ public class WebSecurityConfigurationTests {
|
|
assertThat(privilegeEvaluator.isAllowed("/another", user)).isTrue();
|
|
assertThat(privilegeEvaluator.isAllowed("/another", user)).isTrue();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Configuration
|
|
|
|
+ @EnableWebSecurity
|
|
|
|
+ @Import(CustomBeanPostProcessor.class)
|
|
|
|
+ static class SecurityFilterChainConfig {
|
|
|
|
+
|
|
|
|
+ @Bean
|
|
|
|
+ SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
|
|
|
+ return http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated()).build();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static class CustomBeanPostProcessor implements BeanPostProcessor {
|
|
|
|
+
|
|
|
|
+ int instantiationCount = 0;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
|
|
|
+ if (bean instanceof HttpSecurity) {
|
|
|
|
+ this.instantiationCount++;
|
|
|
|
+ }
|
|
|
|
+ return bean;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
@Configuration
|
|
@Configuration
|
|
@EnableWebSecurity
|
|
@EnableWebSecurity
|
|
@Import(AuthenticationTestConfiguration.class)
|
|
@Import(AuthenticationTestConfiguration.class)
|