mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-24 11:13:30 +00:00
Add FormLoginBuilder.serverAuthenticationSuccessHandler
Fixes: gh-4786
This commit is contained in:
parent
1d4c7da1e1
commit
21aec19d42
@ -36,6 +36,7 @@ import org.springframework.security.web.server.authentication.RedirectServerAuth
|
|||||||
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
|
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
|
||||||
import org.springframework.security.web.server.authentication.ServerAuthenticationEntryPointFailureHandler;
|
import org.springframework.security.web.server.authentication.ServerAuthenticationEntryPointFailureHandler;
|
||||||
import org.springframework.security.web.server.authentication.ServerAuthenticationFailureHandler;
|
import org.springframework.security.web.server.authentication.ServerAuthenticationFailureHandler;
|
||||||
|
import org.springframework.security.web.server.authentication.ServerAuthenticationSuccessHandler;
|
||||||
import org.springframework.security.web.server.authentication.logout.LogoutWebFilter;
|
import org.springframework.security.web.server.authentication.logout.LogoutWebFilter;
|
||||||
import org.springframework.security.web.server.authentication.logout.SecurityContextServerLogoutHandler;
|
import org.springframework.security.web.server.authentication.logout.SecurityContextServerLogoutHandler;
|
||||||
import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler;
|
import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler;
|
||||||
@ -503,11 +504,20 @@ public class ServerHttpSecurity {
|
|||||||
|
|
||||||
private ServerAuthenticationFailureHandler serverAuthenticationFailureHandler;
|
private ServerAuthenticationFailureHandler serverAuthenticationFailureHandler;
|
||||||
|
|
||||||
|
private ServerAuthenticationSuccessHandler serverAuthenticationSuccessHandler = new RedirectServerAuthenticationSuccessHandler("/");
|
||||||
|
|
||||||
public FormLoginBuilder authenticationManager(ReactiveAuthenticationManager authenticationManager) {
|
public FormLoginBuilder authenticationManager(ReactiveAuthenticationManager authenticationManager) {
|
||||||
this.authenticationManager = authenticationManager;
|
this.authenticationManager = authenticationManager;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FormLoginBuilder serverAuthenticationSuccessHandler(
|
||||||
|
ServerAuthenticationSuccessHandler serverAuthenticationSuccessHandler) {
|
||||||
|
Assert.notNull(serverAuthenticationSuccessHandler, "serverAuthenticationSuccessHandler cannot be null");
|
||||||
|
this.serverAuthenticationSuccessHandler = serverAuthenticationSuccessHandler;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public FormLoginBuilder loginPage(String loginPage) {
|
public FormLoginBuilder loginPage(String loginPage) {
|
||||||
this.serverAuthenticationEntryPoint = new RedirectServerAuthenticationEntryPoint(loginPage);
|
this.serverAuthenticationEntryPoint = new RedirectServerAuthenticationEntryPoint(loginPage);
|
||||||
this.requiresAuthenticationMatcher = ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, loginPage);
|
this.requiresAuthenticationMatcher = ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, loginPage);
|
||||||
@ -557,7 +567,7 @@ public class ServerHttpSecurity {
|
|||||||
authenticationFilter.setRequiresAuthenticationMatcher(this.requiresAuthenticationMatcher);
|
authenticationFilter.setRequiresAuthenticationMatcher(this.requiresAuthenticationMatcher);
|
||||||
authenticationFilter.setServerAuthenticationFailureHandler(this.serverAuthenticationFailureHandler);
|
authenticationFilter.setServerAuthenticationFailureHandler(this.serverAuthenticationFailureHandler);
|
||||||
authenticationFilter.setAuthenticationConverter(new ServerFormLoginAuthenticationConverter());
|
authenticationFilter.setAuthenticationConverter(new ServerFormLoginAuthenticationConverter());
|
||||||
authenticationFilter.setServerAuthenticationSuccessHandler(new RedirectServerAuthenticationSuccessHandler("/"));
|
authenticationFilter.setServerAuthenticationSuccessHandler(this.serverAuthenticationSuccessHandler);
|
||||||
authenticationFilter.setServerSecurityContextRepository(this.serverSecurityContextRepository);
|
authenticationFilter.setServerSecurityContextRepository(this.serverSecurityContextRepository);
|
||||||
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.FORM_LOGIN);
|
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.FORM_LOGIN);
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,10 @@ import org.springframework.security.core.userdetails.User;
|
|||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.htmlunit.server.WebTestClientHtmlUnitDriverBuilder;
|
import org.springframework.security.htmlunit.server.WebTestClientHtmlUnitDriverBuilder;
|
||||||
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
||||||
|
import org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapperTests;
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain;
|
import org.springframework.security.web.server.SecurityWebFilterChain;
|
||||||
import org.springframework.security.web.server.WebFilterChainProxy;
|
import org.springframework.security.web.server.WebFilterChainProxy;
|
||||||
|
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -119,6 +121,36 @@ public class FormLoginTests {
|
|||||||
homePage.assertAt();
|
homePage.assertAt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void authenticationSuccess() {
|
||||||
|
SecurityWebFilterChain securityWebFilter = this.http
|
||||||
|
.authorizeExchange()
|
||||||
|
.anyExchange().authenticated()
|
||||||
|
.and()
|
||||||
|
.formLogin()
|
||||||
|
.serverAuthenticationSuccessHandler(new RedirectServerAuthenticationSuccessHandler("/custom"))
|
||||||
|
.and()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
WebTestClient webTestClient = WebTestClientBuilder
|
||||||
|
.bindToWebFilters(securityWebFilter)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
WebDriver driver = WebTestClientHtmlUnitDriverBuilder
|
||||||
|
.webTestClientSetup(webTestClient)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
DefaultLoginPage loginPage = HomePage.to(driver, DefaultLoginPage.class)
|
||||||
|
.assertAt();
|
||||||
|
|
||||||
|
HomePage homePage = loginPage.loginForm()
|
||||||
|
.username("user")
|
||||||
|
.password("password")
|
||||||
|
.submit(HomePage.class);
|
||||||
|
|
||||||
|
assertThat(driver.getCurrentUrl()).endsWith("/custom");
|
||||||
|
}
|
||||||
|
|
||||||
public static class CustomLoginPage {
|
public static class CustomLoginPage {
|
||||||
|
|
||||||
private WebDriver driver;
|
private WebDriver driver;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user