|
@@ -21,6 +21,7 @@ import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.concurrent.Callable;
|
|
import java.util.concurrent.Callable;
|
|
|
|
|
|
|
|
+import javax.servlet.Filter;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
import com.google.common.net.HttpHeaders;
|
|
import com.google.common.net.HttpHeaders;
|
|
@@ -46,6 +47,7 @@ import org.springframework.security.authentication.event.AuthenticationSuccessEv
|
|
import org.springframework.security.config.annotation.SecurityContextChangedListenerConfig;
|
|
import org.springframework.security.config.annotation.SecurityContextChangedListenerConfig;
|
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
|
|
|
+import org.springframework.security.config.annotation.web.configurers.FormLoginConfigurer;
|
|
import org.springframework.security.config.test.SpringTestContext;
|
|
import org.springframework.security.config.test.SpringTestContext;
|
|
import org.springframework.security.config.test.SpringTestContextExtension;
|
|
import org.springframework.security.config.test.SpringTestContextExtension;
|
|
import org.springframework.security.core.Authentication;
|
|
import org.springframework.security.core.Authentication;
|
|
@@ -56,6 +58,8 @@ import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
|
import org.springframework.security.web.SecurityFilterChain;
|
|
import org.springframework.security.web.SecurityFilterChain;
|
|
|
|
+import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
|
|
|
|
+import org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter;
|
|
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
|
|
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import org.springframework.test.web.servlet.MvcResult;
|
|
import org.springframework.test.web.servlet.MvcResult;
|
|
@@ -323,6 +327,16 @@ public class HttpSecurityConfigurationTests {
|
|
.resolveMediaTypes(any(NativeWebRequest.class));
|
|
.resolveMediaTypes(any(NativeWebRequest.class));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // gh-13203
|
|
|
|
+ @Test
|
|
|
|
+ public void disableConfigurerWhenAppliedByAnotherConfigurerThenNotApplied() {
|
|
|
|
+ this.spring.register(ApplyCustomDslConfig.class).autowire();
|
|
|
|
+ SecurityFilterChain filterChain = this.spring.getContext().getBean(SecurityFilterChain.class);
|
|
|
|
+ List<Filter> filters = filterChain.getFilters();
|
|
|
|
+ assertThat(filters).doesNotHaveAnyElementsOfTypes(DefaultLoginPageGeneratingFilter.class,
|
|
|
|
+ DefaultLogoutPageGeneratingFilter.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
@RestController
|
|
@RestController
|
|
static class NameController {
|
|
static class NameController {
|
|
|
|
|
|
@@ -525,6 +539,31 @@ public class HttpSecurityConfigurationTests {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Configuration
|
|
|
|
+ @EnableWebSecurity
|
|
|
|
+ static class ApplyCustomDslConfig {
|
|
|
|
+
|
|
|
|
+ @Bean
|
|
|
|
+ SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
|
|
|
+ http.apply(CustomDsl.customDsl());
|
|
|
|
+ return http.build();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static class CustomDsl extends AbstractHttpConfigurer<CustomDsl, HttpSecurity> {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void init(HttpSecurity http) throws Exception {
|
|
|
|
+ http.formLogin(FormLoginConfigurer::disable);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static CustomDsl customDsl() {
|
|
|
|
+ return new CustomDsl();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
static class DefaultConfigurer extends AbstractHttpConfigurer<DefaultConfigurer, HttpSecurity> {
|
|
static class DefaultConfigurer extends AbstractHttpConfigurer<DefaultConfigurer, HttpSecurity> {
|
|
|
|
|
|
boolean init;
|
|
boolean init;
|