From a32ff0511c79e5454272d6b75aec4f26bfb1c6b5 Mon Sep 17 00:00:00 2001 From: Ihor Ilkevych Date: Wed, 13 Jan 2021 15:03:28 +0200 Subject: [PATCH] Added test with oauth2Login and formLogin with default login page LoginPageGeneratingWebFilter --- .../config/web/server/FormLoginTests.java | 5 +++ .../config/web/server/OAuth2LoginTests.java | 45 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/config/src/test/java/org/springframework/security/config/web/server/FormLoginTests.java b/config/src/test/java/org/springframework/security/config/web/server/FormLoginTests.java index ad09dbf50dd..8324a737fc6 100644 --- a/config/src/test/java/org/springframework/security/config/web/server/FormLoginTests.java +++ b/config/src/test/java/org/springframework/security/config/web/server/FormLoginTests.java @@ -434,6 +434,11 @@ public DefaultLoginPage assertLoginFormNotPresent() { return this; } + public DefaultLoginPage assertLoginFormPresent() { + loginForm().username(""); + return this; + } + public LoginForm loginForm() { if (this.loginForm == null) { this.loginForm = PageFactory.initElements(this.driver, LoginForm.class); diff --git a/config/src/test/java/org/springframework/security/config/web/server/OAuth2LoginTests.java b/config/src/test/java/org/springframework/security/config/web/server/OAuth2LoginTests.java index 211d353203e..3cf0929fc9b 100644 --- a/config/src/test/java/org/springframework/security/config/web/server/OAuth2LoginTests.java +++ b/config/src/test/java/org/springframework/security/config/web/server/OAuth2LoginTests.java @@ -33,14 +33,17 @@ import org.springframework.http.HttpHeaders; import org.springframework.security.authentication.ReactiveAuthenticationManager; import org.springframework.security.authentication.TestingAuthenticationToken; +import org.springframework.security.authentication.UserDetailsRepositoryReactiveAuthenticationManager; import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; import org.springframework.security.config.oauth2.client.CommonOAuth2Provider; import org.springframework.security.config.test.SpringTestRule; +import org.springframework.security.config.users.ReactiveAuthenticationTestConfiguration; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.security.core.userdetails.ReactiveUserDetailsService; import org.springframework.security.htmlunit.server.WebTestClientHtmlUnitDriverBuilder; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient; @@ -176,6 +179,24 @@ public void defaultLoginPageWithSingleClientRegistrationThenRedirect() { assertThat(driver.getCurrentUrl()).startsWith("https://github.com/login/oauth/authorize"); } + @Test + public void defaultLoginPageWithSingleClientRegistrationAndFormLoginThenLinks() { + this.spring.register(OAuth2LoginWithSingleClientRegistrations.class, OAuth2LoginWithFormLogin.class).autowire(); + // @formatter:off + WebTestClient webTestClient = WebTestClientBuilder + .bindToWebFilters(new GitHubWebFilter(), this.springSecurity) + .build(); + WebDriver driver = WebTestClientHtmlUnitDriverBuilder + .webTestClientSetup(webTestClient) + .build(); + FormLoginTests.HomePage.to(driver, FormLoginTests.DefaultLoginPage.class) + .assertAt() + .assertLoginFormPresent() + .oauth2Login() + .assertClientRegistrationByName(OAuth2LoginTests.github.getClientName()); + // @formatter:on + } + // gh-8118 @Test public void defaultLoginPageWithSingleClientRegistrationAndXhrRequestThenDoesNotRedirectForAuthorization() { @@ -584,6 +605,30 @@ String home(@RegisteredOAuth2AuthorizedClient("github") OAuth2AuthorizedClient a } + @Configuration + static class OAuth2LoginWithFormLogin { + + @Bean + SecurityWebFilterChain springSecurityFilter(ServerHttpSecurity http) { + ReactiveUserDetailsService reactiveUserDetailsService = ReactiveAuthenticationTestConfiguration + .userDetailsService(); + ReactiveAuthenticationManager authenticationManager = new UserDetailsRepositoryReactiveAuthenticationManager( + reactiveUserDetailsService); + http.authenticationManager(authenticationManager); + // @formatter:off + http + .authorizeExchange() + .anyExchange().authenticated() + .and() + .oauth2Login() + .and() + .formLogin(); + // @formatter:on + return http.build(); + } + + } + @Configuration static class OAuth2LoginMockAuthenticationManagerConfig {