Browse Source

Polish One-Time Token Component Names

Aligning parts of speech so that names are using nouns/verbs
where comparable components are using nouns/verbs.

Issue gh-15114
Josh Cummings 10 months ago
parent
commit
c40334317d
19 changed files with 158 additions and 142 deletions
  1. 20 20
      config/src/main/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurer.java
  2. 28 28
      config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java
  3. 12 12
      config/src/main/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDsl.kt
  4. 16 16
      config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java
  5. 16 15
      config/src/test/java/org/springframework/security/config/web/server/OneTimeTokenLoginSpecTests.java
  6. 16 9
      config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt
  7. 3 3
      docs/modules/ROOT/pages/reactive/authentication/onetimetoken.adoc
  8. 3 3
      docs/modules/ROOT/pages/servlet/authentication/onetimetoken.adoc
  9. 10 10
      web/src/main/java/org/springframework/security/web/authentication/ott/GenerateOneTimeTokenFilter.java
  10. 1 1
      web/src/main/java/org/springframework/security/web/authentication/ott/OneTimeTokenGenerationSuccessHandler.java
  11. 4 3
      web/src/main/java/org/springframework/security/web/authentication/ott/RedirectOneTimeTokenGenerationSuccessHandler.java
  12. 1 1
      web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java
  13. 2 2
      web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java
  14. 1 1
      web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenGenerationSuccessHandler.java
  15. 5 4
      web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerRedirectOneTimeTokenGenerationSuccessHandler.java
  16. 1 1
      web/src/test/java/org/springframework/security/web/authentication/DefaultLoginPageGeneratingFilterTests.java
  17. 8 6
      web/src/test/java/org/springframework/security/web/authentication/ott/RedirectOneTimeTokenGenerationSuccessHandlerTests.java
  18. 1 1
      web/src/test/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilterTests.java
  19. 10 6
      web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerRedirectOneTimeTokenGenerationSuccessHandlerTests.java

+ 20 - 20
config/src/main/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurer.java

@@ -41,8 +41,8 @@ import org.springframework.security.web.authentication.AuthenticationSuccessHand
 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
 import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenFilter;
 import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenFilter;
-import org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler;
 import org.springframework.security.web.authentication.ott.OneTimeTokenAuthenticationConverter;
 import org.springframework.security.web.authentication.ott.OneTimeTokenAuthenticationConverter;
+import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler;
 import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
 import org.springframework.security.web.authentication.ui.DefaultOneTimeTokenSubmitPageGeneratingFilter;
 import org.springframework.security.web.authentication.ui.DefaultOneTimeTokenSubmitPageGeneratingFilter;
 import org.springframework.security.web.authentication.ui.DefaultResourcesFilter;
 import org.springframework.security.web.authentication.ui.DefaultResourcesFilter;
@@ -73,9 +73,9 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 
 
 	private String loginProcessingUrl = "/login/ott";
 	private String loginProcessingUrl = "/login/ott";
 
 
-	private String generateTokenUrl = "/ott/generate";
+	private String tokenGeneratingUrl = "/ott/generate";
 
 
-	private GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler;
+	private OneTimeTokenGenerationSuccessHandler oneTimeTokenGenerationSuccessHandler;
 
 
 	private AuthenticationProvider authenticationProvider;
 	private AuthenticationProvider authenticationProvider;
 
 
@@ -97,7 +97,7 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 			return;
 			return;
 		}
 		}
 		loginPageGeneratingFilter.setOneTimeTokenEnabled(true);
 		loginPageGeneratingFilter.setOneTimeTokenEnabled(true);
-		loginPageGeneratingFilter.setGenerateOneTimeTokenUrl(this.generateTokenUrl);
+		loginPageGeneratingFilter.setOneTimeTokenGenerationUrl(this.tokenGeneratingUrl);
 		if (this.authenticationFailureHandler == null
 		if (this.authenticationFailureHandler == null
 				&& StringUtils.hasText(loginPageGeneratingFilter.getLoginPageUrl())) {
 				&& StringUtils.hasText(loginPageGeneratingFilter.getLoginPageUrl())) {
 			this.authenticationFailureHandler = new SimpleUrlAuthenticationFailureHandler(
 			this.authenticationFailureHandler = new SimpleUrlAuthenticationFailureHandler(
@@ -134,22 +134,22 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 	private void configureOttGenerateFilter(H http) {
 	private void configureOttGenerateFilter(H http) {
 		GenerateOneTimeTokenFilter generateFilter = new GenerateOneTimeTokenFilter(getOneTimeTokenService(http),
 		GenerateOneTimeTokenFilter generateFilter = new GenerateOneTimeTokenFilter(getOneTimeTokenService(http),
 				getGeneratedOneTimeTokenHandler(http));
 				getGeneratedOneTimeTokenHandler(http));
-		generateFilter.setRequestMatcher(antMatcher(HttpMethod.POST, this.generateTokenUrl));
+		generateFilter.setRequestMatcher(antMatcher(HttpMethod.POST, this.tokenGeneratingUrl));
 		http.addFilter(postProcess(generateFilter));
 		http.addFilter(postProcess(generateFilter));
 		http.addFilter(DefaultResourcesFilter.css());
 		http.addFilter(DefaultResourcesFilter.css());
 	}
 	}
 
 
-	private GeneratedOneTimeTokenHandler getGeneratedOneTimeTokenHandler(H http) {
-		if (this.generatedOneTimeTokenHandler == null) {
-			this.generatedOneTimeTokenHandler = getBeanOrNull(http, GeneratedOneTimeTokenHandler.class);
+	private OneTimeTokenGenerationSuccessHandler getGeneratedOneTimeTokenHandler(H http) {
+		if (this.oneTimeTokenGenerationSuccessHandler == null) {
+			this.oneTimeTokenGenerationSuccessHandler = getBeanOrNull(http, OneTimeTokenGenerationSuccessHandler.class);
 		}
 		}
-		if (this.generatedOneTimeTokenHandler == null) {
+		if (this.oneTimeTokenGenerationSuccessHandler == null) {
 			throw new IllegalStateException("""
 			throw new IllegalStateException("""
 					A GeneratedOneTimeTokenHandler is required to enable oneTimeTokenLogin().
 					A GeneratedOneTimeTokenHandler is required to enable oneTimeTokenLogin().
 					Please provide it as a bean or pass it to the oneTimeTokenLogin() DSL.
 					Please provide it as a bean or pass it to the oneTimeTokenLogin() DSL.
 					""");
 					""");
 		}
 		}
-		return this.generatedOneTimeTokenHandler;
+		return this.oneTimeTokenGenerationSuccessHandler;
 	}
 	}
 
 
 	private void configureSubmitPage(H http) {
 	private void configureSubmitPage(H http) {
@@ -186,22 +186,22 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 	/**
 	/**
 	 * Specifies the URL that a One-Time Token generate request will be processed.
 	 * Specifies the URL that a One-Time Token generate request will be processed.
 	 * Defaults to {@code /ott/generate}.
 	 * Defaults to {@code /ott/generate}.
-	 * @param generateTokenUrl
+	 * @param tokenGeneratingUrl
 	 */
 	 */
-	public OneTimeTokenLoginConfigurer<H> generateTokenUrl(String generateTokenUrl) {
-		Assert.hasText(generateTokenUrl, "generateTokenUrl cannot be null or empty");
-		this.generateTokenUrl = generateTokenUrl;
+	public OneTimeTokenLoginConfigurer<H> tokenGeneratingUrl(String tokenGeneratingUrl) {
+		Assert.hasText(tokenGeneratingUrl, "tokenGeneratingUrl cannot be null or empty");
+		this.tokenGeneratingUrl = tokenGeneratingUrl;
 		return this;
 		return this;
 	}
 	}
 
 
 	/**
 	/**
 	 * Specifies strategy to be used to handle generated one-time tokens.
 	 * Specifies strategy to be used to handle generated one-time tokens.
-	 * @param generatedOneTimeTokenHandler
+	 * @param oneTimeTokenGenerationSuccessHandler
 	 */
 	 */
-	public OneTimeTokenLoginConfigurer<H> generatedOneTimeTokenHandler(
-			GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler) {
-		Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
-		this.generatedOneTimeTokenHandler = generatedOneTimeTokenHandler;
+	public OneTimeTokenLoginConfigurer<H> tokenGenerationSuccessHandler(
+			OneTimeTokenGenerationSuccessHandler oneTimeTokenGenerationSuccessHandler) {
+		Assert.notNull(oneTimeTokenGenerationSuccessHandler, "generatedOneTimeTokenHandler cannot be null");
+		this.oneTimeTokenGenerationSuccessHandler = oneTimeTokenGenerationSuccessHandler;
 		return this;
 		return this;
 	}
 	}
 
 
@@ -248,7 +248,7 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 	 * {@link OneTimeToken}
 	 * {@link OneTimeToken}
 	 * @param oneTimeTokenService
 	 * @param oneTimeTokenService
 	 */
 	 */
-	public OneTimeTokenLoginConfigurer<H> oneTimeTokenService(OneTimeTokenService oneTimeTokenService) {
+	public OneTimeTokenLoginConfigurer<H> tokenService(OneTimeTokenService oneTimeTokenService) {
 		Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
 		Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
 		this.oneTimeTokenService = oneTimeTokenService;
 		this.oneTimeTokenService = oneTimeTokenService;
 		return this;
 		return this;

+ 28 - 28
config/src/main/java/org/springframework/security/config/web/server/ServerHttpSecurity.java

@@ -157,8 +157,8 @@ import org.springframework.security.web.server.authentication.logout.SecurityCon
 import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler;
 import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler;
 import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
 import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
 import org.springframework.security.web.server.authentication.ott.GenerateOneTimeTokenWebFilter;
 import org.springframework.security.web.server.authentication.ott.GenerateOneTimeTokenWebFilter;
-import org.springframework.security.web.server.authentication.ott.ServerGeneratedOneTimeTokenHandler;
 import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenAuthenticationConverter;
 import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenAuthenticationConverter;
+import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenGenerationSuccessHandler;
 import org.springframework.security.web.server.authorization.AuthorizationContext;
 import org.springframework.security.web.server.authorization.AuthorizationContext;
 import org.springframework.security.web.server.authorization.AuthorizationWebFilter;
 import org.springframework.security.web.server.authorization.AuthorizationWebFilter;
 import org.springframework.security.web.server.authorization.DelegatingReactiveAuthorizationManager;
 import org.springframework.security.web.server.authorization.DelegatingReactiveAuthorizationManager;
@@ -5922,7 +5922,7 @@ public class ServerHttpSecurity {
 
 
 		private ReactiveAuthenticationManager authenticationManager;
 		private ReactiveAuthenticationManager authenticationManager;
 
 
-		private ReactiveOneTimeTokenService oneTimeTokenService;
+		private ReactiveOneTimeTokenService tokenService;
 
 
 		private ServerAuthenticationConverter authenticationConverter = new ServerOneTimeTokenAuthenticationConverter();
 		private ServerAuthenticationConverter authenticationConverter = new ServerOneTimeTokenAuthenticationConverter();
 
 
@@ -5936,7 +5936,7 @@ public class ServerHttpSecurity {
 
 
 		private final List<ServerAuthenticationSuccessHandler> authenticationSuccessHandlers = new ArrayList<>();
 		private final List<ServerAuthenticationSuccessHandler> authenticationSuccessHandlers = new ArrayList<>();
 
 
-		private ServerGeneratedOneTimeTokenHandler generatedOneTimeTokenHandler;
+		private ServerOneTimeTokenGenerationSuccessHandler tokenGenerationSuccessHandler;
 
 
 		private ServerSecurityContextRepository securityContextRepository;
 		private ServerSecurityContextRepository securityContextRepository;
 
 
@@ -5944,7 +5944,7 @@ public class ServerHttpSecurity {
 
 
 		private String defaultSubmitPageUrl = "/login/ott";
 		private String defaultSubmitPageUrl = "/login/ott";
 
 
-		private String generateTokenUrl = "/ott/generate";
+		private String tokenGeneratingUrl = "/ott/generate";
 
 
 		private boolean submitPageEnabled = true;
 		private boolean submitPageEnabled = true;
 
 
@@ -5981,10 +5981,10 @@ public class ServerHttpSecurity {
 		}
 		}
 
 
 		private void configureOttGenerateFilter(ServerHttpSecurity http) {
 		private void configureOttGenerateFilter(ServerHttpSecurity http) {
-			GenerateOneTimeTokenWebFilter generateFilter = new GenerateOneTimeTokenWebFilter(getOneTimeTokenService(),
-					getGeneratedOneTimeTokenHandler());
+			GenerateOneTimeTokenWebFilter generateFilter = new GenerateOneTimeTokenWebFilter(getTokenService(),
+					getTokenGenerationSuccessHandler());
 			generateFilter
 			generateFilter
-				.setRequestMatcher(ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, this.generateTokenUrl));
+				.setRequestMatcher(ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, this.tokenGeneratingUrl));
 			http.addFilterAt(generateFilter, SecurityWebFiltersOrder.ONE_TIME_TOKEN);
 			http.addFilterAt(generateFilter, SecurityWebFiltersOrder.ONE_TIME_TOKEN);
 		}
 		}
 
 
@@ -5994,7 +5994,7 @@ public class ServerHttpSecurity {
 					OrderedWebFilter orderedWebFilter = (OrderedWebFilter) webFilter;
 					OrderedWebFilter orderedWebFilter = (OrderedWebFilter) webFilter;
 					if (orderedWebFilter.webFilter instanceof LoginPageGeneratingWebFilter loginPageGeneratingFilter) {
 					if (orderedWebFilter.webFilter instanceof LoginPageGeneratingWebFilter loginPageGeneratingFilter) {
 						loginPageGeneratingFilter.setOneTimeTokenEnabled(true);
 						loginPageGeneratingFilter.setOneTimeTokenEnabled(true);
-						loginPageGeneratingFilter.setGenerateOneTimeTokenUrl(this.generateTokenUrl);
+						loginPageGeneratingFilter.setGenerateOneTimeTokenUrl(this.tokenGeneratingUrl);
 						break;
 						break;
 					}
 					}
 				}
 				}
@@ -6072,7 +6072,7 @@ public class ServerHttpSecurity {
 		ReactiveAuthenticationManager getAuthenticationManager() {
 		ReactiveAuthenticationManager getAuthenticationManager() {
 			if (this.authenticationManager == null) {
 			if (this.authenticationManager == null) {
 				ReactiveUserDetailsService userDetailsService = getBean(ReactiveUserDetailsService.class);
 				ReactiveUserDetailsService userDetailsService = getBean(ReactiveUserDetailsService.class);
-				return new OneTimeTokenReactiveAuthenticationManager(getOneTimeTokenService(), userDetailsService);
+				return new OneTimeTokenReactiveAuthenticationManager(getTokenService(), userDetailsService);
 			}
 			}
 			return this.authenticationManager;
 			return this.authenticationManager;
 		}
 		}
@@ -6082,22 +6082,22 @@ public class ServerHttpSecurity {
 		 * {@link OneTimeToken}
 		 * {@link OneTimeToken}
 		 * @param oneTimeTokenService
 		 * @param oneTimeTokenService
 		 */
 		 */
-		public OneTimeTokenLoginSpec oneTimeTokenService(ReactiveOneTimeTokenService oneTimeTokenService) {
+		public OneTimeTokenLoginSpec tokenService(ReactiveOneTimeTokenService oneTimeTokenService) {
 			Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
 			Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
-			this.oneTimeTokenService = oneTimeTokenService;
+			this.tokenService = oneTimeTokenService;
 			return this;
 			return this;
 		}
 		}
 
 
-		ReactiveOneTimeTokenService getOneTimeTokenService() {
-			if (this.oneTimeTokenService != null) {
-				return this.oneTimeTokenService;
+		ReactiveOneTimeTokenService getTokenService() {
+			if (this.tokenService != null) {
+				return this.tokenService;
 			}
 			}
 			ReactiveOneTimeTokenService oneTimeTokenService = getBeanOrNull(ReactiveOneTimeTokenService.class);
 			ReactiveOneTimeTokenService oneTimeTokenService = getBeanOrNull(ReactiveOneTimeTokenService.class);
 			if (oneTimeTokenService != null) {
 			if (oneTimeTokenService != null) {
 				return oneTimeTokenService;
 				return oneTimeTokenService;
 			}
 			}
-			this.oneTimeTokenService = new InMemoryReactiveOneTimeTokenService();
-			return this.oneTimeTokenService;
+			this.tokenService = new InMemoryReactiveOneTimeTokenService();
+			return this.tokenService;
 		}
 		}
 
 
 		/**
 		/**
@@ -6153,21 +6153,21 @@ public class ServerHttpSecurity {
 		 * Specifies strategy to be used to handle generated one-time tokens.
 		 * Specifies strategy to be used to handle generated one-time tokens.
 		 * @param generatedOneTimeTokenHandler
 		 * @param generatedOneTimeTokenHandler
 		 */
 		 */
-		public OneTimeTokenLoginSpec generatedOneTimeTokenHandler(
-				ServerGeneratedOneTimeTokenHandler generatedOneTimeTokenHandler) {
+		public OneTimeTokenLoginSpec tokenGenerationSuccessHandler(
+				ServerOneTimeTokenGenerationSuccessHandler generatedOneTimeTokenHandler) {
 			Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
 			Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
-			this.generatedOneTimeTokenHandler = generatedOneTimeTokenHandler;
+			this.tokenGenerationSuccessHandler = generatedOneTimeTokenHandler;
 			return this;
 			return this;
 		}
 		}
 
 
 		/**
 		/**
 		 * Specifies the URL that a One-Time Token generate request will be processed.
 		 * Specifies the URL that a One-Time Token generate request will be processed.
 		 * Defaults to {@code /ott/generate}.
 		 * Defaults to {@code /ott/generate}.
-		 * @param generateTokenUrl
+		 * @param tokenGeneratingUrl
 		 */
 		 */
-		public OneTimeTokenLoginSpec generateTokenUrl(String generateTokenUrl) {
-			Assert.hasText(generateTokenUrl, "generateTokenUrl cannot be null or empty");
-			this.generateTokenUrl = generateTokenUrl;
+		public OneTimeTokenLoginSpec tokenGeneratingUrl(String tokenGeneratingUrl) {
+			Assert.hasText(tokenGeneratingUrl, "tokenGeneratingUrl cannot be null or empty");
+			this.tokenGeneratingUrl = tokenGeneratingUrl;
 			return this;
 			return this;
 		}
 		}
 
 
@@ -6187,17 +6187,17 @@ public class ServerHttpSecurity {
 			return this;
 			return this;
 		}
 		}
 
 
-		private ServerGeneratedOneTimeTokenHandler getGeneratedOneTimeTokenHandler() {
-			if (this.generatedOneTimeTokenHandler == null) {
-				this.generatedOneTimeTokenHandler = getBeanOrNull(ServerGeneratedOneTimeTokenHandler.class);
+		private ServerOneTimeTokenGenerationSuccessHandler getTokenGenerationSuccessHandler() {
+			if (this.tokenGenerationSuccessHandler == null) {
+				this.tokenGenerationSuccessHandler = getBeanOrNull(ServerOneTimeTokenGenerationSuccessHandler.class);
 			}
 			}
-			if (this.generatedOneTimeTokenHandler == null) {
+			if (this.tokenGenerationSuccessHandler == null) {
 				throw new IllegalStateException("""
 				throw new IllegalStateException("""
 						A ServerGeneratedOneTimeTokenHandler is required to enable oneTimeTokenLogin().
 						A ServerGeneratedOneTimeTokenHandler is required to enable oneTimeTokenLogin().
 						Please provide it as a bean or pass it to the oneTimeTokenLogin() DSL.
 						Please provide it as a bean or pass it to the oneTimeTokenLogin() DSL.
 						""");
 						""");
 			}
 			}
-			return this.generatedOneTimeTokenHandler;
+			return this.tokenGenerationSuccessHandler;
 		}
 		}
 
 
 	}
 	}

+ 12 - 12
config/src/main/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDsl.kt

@@ -23,40 +23,40 @@ import org.springframework.security.config.annotation.web.configurers.ott.OneTim
 import org.springframework.security.web.authentication.AuthenticationConverter
 import org.springframework.security.web.authentication.AuthenticationConverter
 import org.springframework.security.web.authentication.AuthenticationFailureHandler
 import org.springframework.security.web.authentication.AuthenticationFailureHandler
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler
 import org.springframework.security.web.authentication.AuthenticationSuccessHandler
-import org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler
+import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler
 
 
 /**
 /**
  * A Kotlin DSL to configure [HttpSecurity] OAuth 2.0 login using idiomatic Kotlin code.
  * A Kotlin DSL to configure [HttpSecurity] OAuth 2.0 login using idiomatic Kotlin code.
  *
  *
  * @author Max Batischev
  * @author Max Batischev
  * @since 6.4
  * @since 6.4
- * @property oneTimeTokenService configures the [OneTimeTokenService] used to generate and consume
+ * @property tokenService configures the [OneTimeTokenService] used to generate and consume
  * @property authenticationConverter Use this [AuthenticationConverter] when converting incoming requests to an authentication
  * @property authenticationConverter Use this [AuthenticationConverter] when converting incoming requests to an authentication
  * @property authenticationFailureHandler the [AuthenticationFailureHandler] to use when authentication
  * @property authenticationFailureHandler the [AuthenticationFailureHandler] to use when authentication
  * @property authenticationSuccessHandler the [AuthenticationSuccessHandler] to be used
  * @property authenticationSuccessHandler the [AuthenticationSuccessHandler] to be used
  * @property defaultSubmitPageUrl sets the URL that the default submit page will be generated
  * @property defaultSubmitPageUrl sets the URL that the default submit page will be generated
  * @property showDefaultSubmitPage configures whether the default one-time token submit page should be shown
  * @property showDefaultSubmitPage configures whether the default one-time token submit page should be shown
  * @property loginProcessingUrl the URL to process the login request
  * @property loginProcessingUrl the URL to process the login request
- * @property generateTokenUrl the URL that a One-Time Token generate request will be processed
- * @property generatedOneTimeTokenHandler the strategy to be used to handle generated one-time tokens
+ * @property tokenGeneratingUrl the URL that a One-Time Token generate request will be processed
+ * @property oneTimeTokenGenerationSuccessHandler the strategy to be used to handle generated one-time tokens
  * @property authenticationProvider the [AuthenticationProvider] to use when authenticating the user
  * @property authenticationProvider the [AuthenticationProvider] to use when authenticating the user
  */
  */
 @SecurityMarker
 @SecurityMarker
 class OneTimeTokenLoginDsl {
 class OneTimeTokenLoginDsl {
-    var oneTimeTokenService: OneTimeTokenService? = null
+    var tokenService: OneTimeTokenService? = null
     var authenticationConverter: AuthenticationConverter? = null
     var authenticationConverter: AuthenticationConverter? = null
     var authenticationFailureHandler: AuthenticationFailureHandler? = null
     var authenticationFailureHandler: AuthenticationFailureHandler? = null
     var authenticationSuccessHandler: AuthenticationSuccessHandler? = null
     var authenticationSuccessHandler: AuthenticationSuccessHandler? = null
     var defaultSubmitPageUrl: String? = null
     var defaultSubmitPageUrl: String? = null
     var loginProcessingUrl: String? = null
     var loginProcessingUrl: String? = null
-    var generateTokenUrl: String? = null
+    var tokenGeneratingUrl: String? = null
     var showDefaultSubmitPage: Boolean? = true
     var showDefaultSubmitPage: Boolean? = true
-    var generatedOneTimeTokenHandler: GeneratedOneTimeTokenHandler? = null
+    var oneTimeTokenGenerationSuccessHandler: OneTimeTokenGenerationSuccessHandler? = null
     var authenticationProvider: AuthenticationProvider? = null
     var authenticationProvider: AuthenticationProvider? = null
 
 
     internal fun get(): (OneTimeTokenLoginConfigurer<HttpSecurity>) -> Unit {
     internal fun get(): (OneTimeTokenLoginConfigurer<HttpSecurity>) -> Unit {
         return { oneTimeTokenLoginConfigurer ->
         return { oneTimeTokenLoginConfigurer ->
-            oneTimeTokenService?.also { oneTimeTokenLoginConfigurer.oneTimeTokenService(oneTimeTokenService) }
+            tokenService?.also { oneTimeTokenLoginConfigurer.tokenService(tokenService) }
             authenticationConverter?.also { oneTimeTokenLoginConfigurer.authenticationConverter(authenticationConverter) }
             authenticationConverter?.also { oneTimeTokenLoginConfigurer.authenticationConverter(authenticationConverter) }
             authenticationFailureHandler?.also {
             authenticationFailureHandler?.also {
                 oneTimeTokenLoginConfigurer.authenticationFailureHandler(
                 oneTimeTokenLoginConfigurer.authenticationFailureHandler(
@@ -71,10 +71,10 @@ class OneTimeTokenLoginDsl {
             defaultSubmitPageUrl?.also { oneTimeTokenLoginConfigurer.defaultSubmitPageUrl(defaultSubmitPageUrl) }
             defaultSubmitPageUrl?.also { oneTimeTokenLoginConfigurer.defaultSubmitPageUrl(defaultSubmitPageUrl) }
             showDefaultSubmitPage?.also { oneTimeTokenLoginConfigurer.showDefaultSubmitPage(showDefaultSubmitPage!!) }
             showDefaultSubmitPage?.also { oneTimeTokenLoginConfigurer.showDefaultSubmitPage(showDefaultSubmitPage!!) }
             loginProcessingUrl?.also { oneTimeTokenLoginConfigurer.loginProcessingUrl(loginProcessingUrl) }
             loginProcessingUrl?.also { oneTimeTokenLoginConfigurer.loginProcessingUrl(loginProcessingUrl) }
-            generateTokenUrl?.also { oneTimeTokenLoginConfigurer.generateTokenUrl(generateTokenUrl) }
-            generatedOneTimeTokenHandler?.also {
-                oneTimeTokenLoginConfigurer.generatedOneTimeTokenHandler(
-                    generatedOneTimeTokenHandler
+            tokenGeneratingUrl?.also { oneTimeTokenLoginConfigurer.tokenGeneratingUrl(tokenGeneratingUrl) }
+            oneTimeTokenGenerationSuccessHandler?.also {
+                oneTimeTokenLoginConfigurer.tokenGenerationSuccessHandler(
+                    oneTimeTokenGenerationSuccessHandler
                 )
                 )
             }
             }
             authenticationProvider?.also { oneTimeTokenLoginConfigurer.authenticationProvider(authenticationProvider) }
             authenticationProvider?.also { oneTimeTokenLoginConfigurer.authenticationProvider(authenticationProvider) }

+ 16 - 16
config/src/test/java/org/springframework/security/config/annotation/web/configurers/ott/OneTimeTokenLoginConfigurerTests.java

@@ -40,8 +40,8 @@ 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.SimpleUrlAuthenticationSuccessHandler;
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
-import org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler;
-import org.springframework.security.web.authentication.ott.RedirectGeneratedOneTimeTokenHandler;
+import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler;
+import org.springframework.security.web.authentication.ott.RedirectOneTimeTokenGenerationSuccessHandler;
 import org.springframework.security.web.csrf.CsrfToken;
 import org.springframework.security.web.csrf.CsrfToken;
 import org.springframework.security.web.csrf.DefaultCsrfToken;
 import org.springframework.security.web.csrf.DefaultCsrfToken;
 import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
 import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
@@ -72,7 +72,7 @@ public class OneTimeTokenLoginConfigurerTests {
 		this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf()))
 		this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/login/ott"));
 			.andExpectAll(status().isFound(), redirectedUrl("/login/ott"));
 
 
-		String token = TestGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		this.mvc.perform(post("/login/ott").param("token", token).with(csrf()))
 		this.mvc.perform(post("/login/ott").param("token", token).with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/"), authenticated());
 			.andExpectAll(status().isFound(), redirectedUrl("/"), authenticated());
@@ -84,7 +84,7 @@ public class OneTimeTokenLoginConfigurerTests {
 		this.mvc.perform(post("/generateurl").param("username", "user").with(csrf()))
 		this.mvc.perform(post("/generateurl").param("username", "user").with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/redirected"));
 			.andExpectAll(status().isFound(), redirectedUrl("/redirected"));
 
 
-		String token = TestGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		this.mvc.perform(post("/loginprocessingurl").param("token", token).with(csrf()))
 		this.mvc.perform(post("/loginprocessingurl").param("token", token).with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/authenticated"), authenticated());
 			.andExpectAll(status().isFound(), redirectedUrl("/authenticated"), authenticated());
@@ -96,7 +96,7 @@ public class OneTimeTokenLoginConfigurerTests {
 		this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf()))
 		this.mvc.perform(post("/ott/generate").param("username", "user").with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/login/ott"));
 			.andExpectAll(status().isFound(), redirectedUrl("/login/ott"));
 
 
-		String token = TestGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		this.mvc.perform(post("/login/ott").param("token", token).with(csrf()))
 		this.mvc.perform(post("/login/ott").param("token", token).with(csrf()))
 			.andExpectAll(status().isFound(), redirectedUrl("/"), authenticated());
 			.andExpectAll(status().isFound(), redirectedUrl("/"), authenticated());
@@ -183,7 +183,7 @@ public class OneTimeTokenLoginConfigurerTests {
 	}
 	}
 
 
 	@Test
 	@Test
-	void oneTimeTokenWhenNoGeneratedOneTimeTokenHandlerThenException() {
+	void oneTimeTokenWhenNoTokenGenerationSuccessHandlerThenException() {
 		assertThatException()
 		assertThatException()
 			.isThrownBy(() -> this.spring.register(OneTimeTokenNoGeneratedOttHandlerConfig.class).autowire())
 			.isThrownBy(() -> this.spring.register(OneTimeTokenNoGeneratedOttHandlerConfig.class).autowire())
 			.havingRootCause()
 			.havingRootCause()
@@ -207,7 +207,7 @@ public class OneTimeTokenLoginConfigurerTests {
 							.anyRequest().authenticated()
 							.anyRequest().authenticated()
 					)
 					)
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generatedOneTimeTokenHandler(new TestGeneratedOneTimeTokenHandler())
+							.tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler())
 					);
 					);
 			// @formatter:on
 			// @formatter:on
 			return http.build();
 			return http.build();
@@ -228,8 +228,8 @@ public class OneTimeTokenLoginConfigurerTests {
 							.anyRequest().authenticated()
 							.anyRequest().authenticated()
 					)
 					)
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generateTokenUrl("/generateurl")
-							.generatedOneTimeTokenHandler(new TestGeneratedOneTimeTokenHandler("/redirected"))
+							.tokenGeneratingUrl("/generateurl")
+							.tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler("/redirected"))
 							.loginProcessingUrl("/loginprocessingurl")
 							.loginProcessingUrl("/loginprocessingurl")
 							.authenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/authenticated"))
 							.authenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/authenticated"))
 					);
 					);
@@ -253,7 +253,7 @@ public class OneTimeTokenLoginConfigurerTests {
 					)
 					)
 					.formLogin(Customizer.withDefaults())
 					.formLogin(Customizer.withDefaults())
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generatedOneTimeTokenHandler(new TestGeneratedOneTimeTokenHandler())
+							.tokenGenerationSuccessHandler(new TestOneTimeTokenGenerationSuccessHandler())
 					);
 					);
 			// @formatter:on
 			// @formatter:on
 			return http.build();
 			return http.build();
@@ -280,18 +280,18 @@ public class OneTimeTokenLoginConfigurerTests {
 
 
 	}
 	}
 
 
-	static class TestGeneratedOneTimeTokenHandler implements GeneratedOneTimeTokenHandler {
+	static class TestOneTimeTokenGenerationSuccessHandler implements OneTimeTokenGenerationSuccessHandler {
 
 
 		private static OneTimeToken lastToken;
 		private static OneTimeToken lastToken;
 
 
-		private final GeneratedOneTimeTokenHandler delegate;
+		private final OneTimeTokenGenerationSuccessHandler delegate;
 
 
-		TestGeneratedOneTimeTokenHandler() {
-			this.delegate = new RedirectGeneratedOneTimeTokenHandler("/login/ott");
+		TestOneTimeTokenGenerationSuccessHandler() {
+			this.delegate = new RedirectOneTimeTokenGenerationSuccessHandler("/login/ott");
 		}
 		}
 
 
-		TestGeneratedOneTimeTokenHandler(String redirectUrl) {
-			this.delegate = new RedirectGeneratedOneTimeTokenHandler(redirectUrl);
+		TestOneTimeTokenGenerationSuccessHandler(String redirectUrl) {
+			this.delegate = new RedirectOneTimeTokenGenerationSuccessHandler(redirectUrl);
 		}
 		}
 
 
 		@Override
 		@Override

+ 16 - 15
config/src/test/java/org/springframework/security/config/web/server/OneTimeTokenLoginSpecTests.java

@@ -40,8 +40,8 @@ import org.springframework.security.core.userdetails.User;
 import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers;
 import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers;
 import org.springframework.security.web.server.SecurityWebFilterChain;
 import org.springframework.security.web.server.SecurityWebFilterChain;
 import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
 import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
-import org.springframework.security.web.server.authentication.ott.ServerGeneratedOneTimeTokenHandler;
-import org.springframework.security.web.server.authentication.ott.ServerRedirectGeneratedOneTimeTokenHandler;
+import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenGenerationSuccessHandler;
+import org.springframework.security.web.server.authentication.ott.ServerRedirectOneTimeTokenGenerationSuccessHandler;
 import org.springframework.test.web.reactive.server.WebTestClient;
 import org.springframework.test.web.reactive.server.WebTestClient;
 import org.springframework.web.reactive.config.EnableWebFlux;
 import org.springframework.web.reactive.config.EnableWebFlux;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.BodyInserters;
@@ -107,7 +107,7 @@ public class OneTimeTokenLoginSpecTests {
 				.expectHeader().valueEquals("Location", "/login/ott");
 				.expectHeader().valueEquals("Location", "/login/ott");
 		// @formatter:on
 		// @formatter:on
 
 
-		String token = TestServerGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestServerOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		// @formatter:off
 		// @formatter:off
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
@@ -143,7 +143,7 @@ public class OneTimeTokenLoginSpecTests {
 				.expectHeader().valueEquals("Location", "/redirected");
 				.expectHeader().valueEquals("Location", "/redirected");
 		// @formatter:on
 		// @formatter:on
 
 
-		String token = TestServerGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestServerOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		// @formatter:off
 		// @formatter:off
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
@@ -179,7 +179,7 @@ public class OneTimeTokenLoginSpecTests {
 				.expectHeader().valueEquals("Location", "/login/ott");
 				.expectHeader().valueEquals("Location", "/login/ott");
 		// @formatter:on
 		// @formatter:on
 
 
-		String token = TestServerGeneratedOneTimeTokenHandler.lastToken.getTokenValue();
+		String token = TestServerOneTimeTokenGenerationSuccessHandler.lastToken.getTokenValue();
 
 
 		// @formatter:off
 		// @formatter:off
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
 		this.client.mutateWith(SecurityMockServerConfigurers.csrf())
@@ -295,7 +295,7 @@ public class OneTimeTokenLoginSpecTests {
 							.authenticated()
 							.authenticated()
 					)
 					)
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generatedOneTimeTokenHandler(new TestServerGeneratedOneTimeTokenHandler())
+							.tokenGenerationSuccessHandler(new TestServerOneTimeTokenGenerationSuccessHandler())
 					);
 					);
 			// @formatter:on
 			// @formatter:on
 			return http.build();
 			return http.build();
@@ -318,8 +318,8 @@ public class OneTimeTokenLoginSpecTests {
 							.authenticated()
 							.authenticated()
 					)
 					)
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generateTokenUrl("/generateurl")
-							.generatedOneTimeTokenHandler(new TestServerGeneratedOneTimeTokenHandler("/redirected"))
+							.tokenGeneratingUrl("/generateurl")
+							.tokenGenerationSuccessHandler(new TestServerOneTimeTokenGenerationSuccessHandler("/redirected"))
 							.loginProcessingUrl("/loginprocessingurl")
 							.loginProcessingUrl("/loginprocessingurl")
 							.authenticationSuccessHandler(new RedirectServerAuthenticationSuccessHandler("/authenticated"))
 							.authenticationSuccessHandler(new RedirectServerAuthenticationSuccessHandler("/authenticated"))
 					);
 					);
@@ -345,7 +345,7 @@ public class OneTimeTokenLoginSpecTests {
 					)
 					)
 					.formLogin(Customizer.withDefaults())
 					.formLogin(Customizer.withDefaults())
 					.oneTimeTokenLogin((ott) -> ott
 					.oneTimeTokenLogin((ott) -> ott
-							.generatedOneTimeTokenHandler(new TestServerGeneratedOneTimeTokenHandler())
+							.tokenGenerationSuccessHandler(new TestServerOneTimeTokenGenerationSuccessHandler())
 					);
 					);
 			// @formatter:on
 			// @formatter:on
 			return http.build();
 			return http.build();
@@ -385,18 +385,19 @@ public class OneTimeTokenLoginSpecTests {
 
 
 	}
 	}
 
 
-	private static class TestServerGeneratedOneTimeTokenHandler implements ServerGeneratedOneTimeTokenHandler {
+	private static class TestServerOneTimeTokenGenerationSuccessHandler
+			implements ServerOneTimeTokenGenerationSuccessHandler {
 
 
 		private static OneTimeToken lastToken;
 		private static OneTimeToken lastToken;
 
 
-		private final ServerGeneratedOneTimeTokenHandler delegate;
+		private final ServerOneTimeTokenGenerationSuccessHandler delegate;
 
 
-		TestServerGeneratedOneTimeTokenHandler() {
-			this.delegate = new ServerRedirectGeneratedOneTimeTokenHandler("/login/ott");
+		TestServerOneTimeTokenGenerationSuccessHandler() {
+			this.delegate = new ServerRedirectOneTimeTokenGenerationSuccessHandler("/login/ott");
 		}
 		}
 
 
-		TestServerGeneratedOneTimeTokenHandler(String redirectUrl) {
-			this.delegate = new ServerRedirectGeneratedOneTimeTokenHandler(redirectUrl);
+		TestServerOneTimeTokenGenerationSuccessHandler(String redirectUrl) {
+			this.delegate = new ServerRedirectOneTimeTokenGenerationSuccessHandler(redirectUrl);
 		}
 		}
 
 
 		@Override
 		@Override

+ 16 - 9
config/src/test/kotlin/org/springframework/security/config/annotation/web/OneTimeTokenLoginDslTests.kt

@@ -36,8 +36,8 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequ
 import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers
 import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers
 import org.springframework.security.web.SecurityFilterChain
 import org.springframework.security.web.SecurityFilterChain
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
 import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
-import org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler
-import org.springframework.security.web.authentication.ott.RedirectGeneratedOneTimeTokenHandler
+import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler
+import org.springframework.security.web.authentication.ott.RedirectOneTimeTokenGenerationSuccessHandler
 import org.springframework.test.web.servlet.MockMvc
 import org.springframework.test.web.servlet.MockMvc
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers
@@ -117,7 +117,7 @@ class OneTimeTokenLoginDslTests {
                     authorize(anyRequest, authenticated)
                     authorize(anyRequest, authenticated)
                 }
                 }
                 oneTimeTokenLogin {
                 oneTimeTokenLogin {
-                    generatedOneTimeTokenHandler = TestGeneratedOneTimeTokenHandler()
+                    oneTimeTokenGenerationSuccessHandler = TestGeneratedOneTimeTokenHandler()
                 }
                 }
             }
             }
             // @formatter:on
             // @formatter:on
@@ -137,8 +137,8 @@ class OneTimeTokenLoginDslTests {
                     authorize(anyRequest, authenticated)
                     authorize(anyRequest, authenticated)
                 }
                 }
                 oneTimeTokenLogin {
                 oneTimeTokenLogin {
-                    generateTokenUrl = "/generateurl"
-                    generatedOneTimeTokenHandler = TestGeneratedOneTimeTokenHandler("/redirected")
+                    tokenGeneratingUrl = "/generateurl"
+                    oneTimeTokenGenerationSuccessHandler = TestGeneratedOneTimeTokenHandler("/redirected")
                     loginProcessingUrl = "/loginprocessingurl"
                     loginProcessingUrl = "/loginprocessingurl"
                     authenticationSuccessHandler = SimpleUrlAuthenticationSuccessHandler("/authenticated")
                     authenticationSuccessHandler = SimpleUrlAuthenticationSuccessHandler("/authenticated")
                 }
                 }
@@ -156,15 +156,22 @@ class OneTimeTokenLoginDslTests {
             InMemoryUserDetailsManager(PasswordEncodedUser.user(), PasswordEncodedUser.admin())
             InMemoryUserDetailsManager(PasswordEncodedUser.user(), PasswordEncodedUser.admin())
     }
     }
 
 
-    private class TestGeneratedOneTimeTokenHandler : GeneratedOneTimeTokenHandler {
-        private val delegate: GeneratedOneTimeTokenHandler
+    private class TestGeneratedOneTimeTokenHandler :
+        OneTimeTokenGenerationSuccessHandler {
+        private val delegate: OneTimeTokenGenerationSuccessHandler
 
 
         constructor() {
         constructor() {
-            this.delegate = RedirectGeneratedOneTimeTokenHandler("/login/ott")
+            this.delegate =
+                RedirectOneTimeTokenGenerationSuccessHandler(
+                    "/login/ott"
+                )
         }
         }
 
 
         constructor(redirectUrl: String?) {
         constructor(redirectUrl: String?) {
-            this.delegate = RedirectGeneratedOneTimeTokenHandler(redirectUrl)
+            this.delegate =
+                RedirectOneTimeTokenGenerationSuccessHandler(
+                    redirectUrl
+                )
         }
         }
 
 
         override fun handle(request: HttpServletRequest, response: HttpServletResponse, oneTimeToken: OneTimeToken) {
         override fun handle(request: HttpServletRequest, response: HttpServletResponse, oneTimeToken: OneTimeToken) {

+ 3 - 3
docs/modules/ROOT/pages/reactive/authentication/onetimetoken.adoc

@@ -16,7 +16,7 @@ For clarity, we'll assume OTP refers to https://en.wikipedia.org/wiki/Time-based
 
 
 === Token Delivery
 === Token Delivery
 
 
-- OTT: Usually a custom javadoc:org.springframework.security.web.server.authentication.ott.ServerGeneratedOneTimeTokenHandler[] must be implemented, responsible for delivering the token to the end user.
+- OTT: Usually a custom javadoc:org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenGenerationSuccessHandler[] must be implemented, responsible for delivering the token to the end user.
 - OTP: The token is often generated by an external tool, so there's no need to send it to the user via the application.
 - OTP: The token is often generated by an external tool, so there's no need to send it to the user via the application.
 
 
 === Token Generation
 === Token Generation
@@ -49,7 +49,7 @@ It will also set up the javadoc:org.springframework.security.web.server.ui.OneTi
 == Sending the Token to the User
 == Sending the Token to the User
 
 
 It is not possible for Spring Security to reasonably determine the way the token should be delivered to your users.
 It is not possible for Spring Security to reasonably determine the way the token should be delivered to your users.
-Therefore, a custom javadoc:org.springframework.security.web.server.authentication.ott.ServerGeneratedOneTimeTokenHandler[] must be provided to deliver the token to the user based on your needs.
+Therefore, a custom javadoc:org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenGenerationSuccessHandler[] must be provided to deliver the token to the user based on your needs.
 One of the most common delivery strategies is a Magic Link, via e-mail, SMS, etc.
 One of the most common delivery strategies is a Magic Link, via e-mail, SMS, etc.
 In the following example, we are going to create a magic link and sent it to the user's email.
 In the following example, we are going to create a magic link and sent it to the user's email.
 
 
@@ -126,7 +126,7 @@ class PageController {
 <2> Create a login processing URL with the `token` as a query param
 <2> Create a login processing URL with the `token` as a query param
 <3> Retrieve the user's email based on the username
 <3> Retrieve the user's email based on the username
 <4> Use the `JavaMailSender` API to send the email to the user with the magic link
 <4> Use the `JavaMailSender` API to send the email to the user with the magic link
-<5> Use the `ServerRedirectGeneratedOneTimeTokenHandler` to perform a redirect to your desired URL
+<5> Use the `ServerRedirectOneTimeTokenGenerationSuccessHandler` to perform a redirect to your desired URL
 
 
 The email content will look similar to:
 The email content will look similar to:
 
 

+ 3 - 3
docs/modules/ROOT/pages/servlet/authentication/onetimetoken.adoc

@@ -16,7 +16,7 @@ For clarity, we'll assume OTP refers to https://en.wikipedia.org/wiki/Time-based
 
 
 === Token Delivery
 === Token Delivery
 
 
-- OTT: Usually a custom javadoc:org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler[] must be implemented, responsible for delivering the token to the end user.
+- OTT: Usually a custom javadoc:org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler[] must be implemented, responsible for delivering the token to the end user.
 - OTP: The token is often generated by an external tool, so there's no need to send it to the user via the application.
 - OTP: The token is often generated by an external tool, so there's no need to send it to the user via the application.
 
 
 === Token Generation
 === Token Generation
@@ -49,7 +49,7 @@ It will also set up the javadoc:org.springframework.security.web.authentication.
 == Sending the Token to the User
 == Sending the Token to the User
 
 
 It is not possible for Spring Security to reasonably determine the way the token should be delivered to your users.
 It is not possible for Spring Security to reasonably determine the way the token should be delivered to your users.
-Therefore, a custom javadoc:org.springframework.security.web.authentication.ott.GeneratedOneTimeTokenHandler[] must be provided to deliver the token to the user based on your needs.
+Therefore, a custom javadoc:org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler[] must be provided to deliver the token to the user based on your needs.
 One of the most common delivery strategies is a Magic Link, via e-mail, SMS, etc.
 One of the most common delivery strategies is a Magic Link, via e-mail, SMS, etc.
 In the following example, we are going to create a magic link and sent it to the user's email.
 In the following example, we are going to create a magic link and sent it to the user's email.
 
 
@@ -183,7 +183,7 @@ class PageController {
 <2> Create a login processing URL with the `token` as a query param
 <2> Create a login processing URL with the `token` as a query param
 <3> Retrieve the user's email based on the username
 <3> Retrieve the user's email based on the username
 <4> Use the `JavaMailSender` API to send the email to the user with the magic link
 <4> Use the `JavaMailSender` API to send the email to the user with the magic link
-<5> Use the `RedirectGeneratedOneTimeTokenHandler` to perform a redirect to your desired URL
+<5> Use the `RedirectOneTimeTokenGenerationSuccessHandler` to perform a redirect to your desired URL
 
 
 The email content will look similar to:
 The email content will look similar to:
 
 

+ 10 - 10
web/src/main/java/org/springframework/security/web/authentication/ott/GenerateOneTimeTokenFilter.java

@@ -43,18 +43,18 @@ import static org.springframework.security.web.util.matcher.AntPathRequestMatche
  */
  */
 public final class GenerateOneTimeTokenFilter extends OncePerRequestFilter {
 public final class GenerateOneTimeTokenFilter extends OncePerRequestFilter {
 
 
-	private final OneTimeTokenService oneTimeTokenService;
+	private final OneTimeTokenService tokenService;
 
 
-	private final GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler;
+	private final OneTimeTokenGenerationSuccessHandler tokenGenerationSuccessHandler;
 
 
 	private RequestMatcher requestMatcher = antMatcher(HttpMethod.POST, "/ott/generate");
 	private RequestMatcher requestMatcher = antMatcher(HttpMethod.POST, "/ott/generate");
 
 
-	public GenerateOneTimeTokenFilter(OneTimeTokenService oneTimeTokenService,
-			GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler) {
-		Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
-		Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
-		this.oneTimeTokenService = oneTimeTokenService;
-		this.generatedOneTimeTokenHandler = generatedOneTimeTokenHandler;
+	public GenerateOneTimeTokenFilter(OneTimeTokenService tokenService,
+			OneTimeTokenGenerationSuccessHandler tokenGenerationSuccessHandler) {
+		Assert.notNull(tokenService, "tokenService cannot be null");
+		Assert.notNull(tokenGenerationSuccessHandler, "tokenGenerationSuccessHandler cannot be null");
+		this.tokenService = tokenService;
+		this.tokenGenerationSuccessHandler = tokenGenerationSuccessHandler;
 	}
 	}
 
 
 	@Override
 	@Override
@@ -70,8 +70,8 @@ public final class GenerateOneTimeTokenFilter extends OncePerRequestFilter {
 			return;
 			return;
 		}
 		}
 		GenerateOneTimeTokenRequest generateRequest = new GenerateOneTimeTokenRequest(username);
 		GenerateOneTimeTokenRequest generateRequest = new GenerateOneTimeTokenRequest(username);
-		OneTimeToken ott = this.oneTimeTokenService.generate(generateRequest);
-		this.generatedOneTimeTokenHandler.handle(request, response, ott);
+		OneTimeToken ott = this.tokenService.generate(generateRequest);
+		this.tokenGenerationSuccessHandler.handle(request, response, ott);
 	}
 	}
 
 
 	/**
 	/**

+ 1 - 1
web/src/main/java/org/springframework/security/web/authentication/ott/GeneratedOneTimeTokenHandler.java → web/src/main/java/org/springframework/security/web/authentication/ott/OneTimeTokenGenerationSuccessHandler.java

@@ -31,7 +31,7 @@ import org.springframework.security.authentication.ott.OneTimeToken;
  * @since 6.4
  * @since 6.4
  */
  */
 @FunctionalInterface
 @FunctionalInterface
-public interface GeneratedOneTimeTokenHandler {
+public interface OneTimeTokenGenerationSuccessHandler {
 
 
 	/**
 	/**
 	 * Handles generated one-time tokens
 	 * Handles generated one-time tokens

+ 4 - 3
web/src/main/java/org/springframework/security/web/authentication/ott/RedirectGeneratedOneTimeTokenHandler.java → web/src/main/java/org/springframework/security/web/authentication/ott/RedirectOneTimeTokenGenerationSuccessHandler.java

@@ -27,12 +27,13 @@ import org.springframework.security.web.RedirectStrategy;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
 /**
 /**
- * A {@link GeneratedOneTimeTokenHandler} that performs a redirect to a specific location
+ * A {@link OneTimeTokenGenerationSuccessHandler} that performs a redirect to a specific
+ * location
  *
  *
  * @author Marcus da Coregio
  * @author Marcus da Coregio
  * @since 6.4
  * @since 6.4
  */
  */
-public final class RedirectGeneratedOneTimeTokenHandler implements GeneratedOneTimeTokenHandler {
+public final class RedirectOneTimeTokenGenerationSuccessHandler implements OneTimeTokenGenerationSuccessHandler {
 
 
 	private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
 	private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
 
 
@@ -42,7 +43,7 @@ public final class RedirectGeneratedOneTimeTokenHandler implements GeneratedOneT
 	 * Constructs an instance of this class that redirects to the specified URL.
 	 * Constructs an instance of this class that redirects to the specified URL.
 	 * @param redirectUrl
 	 * @param redirectUrl
 	 */
 	 */
-	public RedirectGeneratedOneTimeTokenHandler(String redirectUrl) {
+	public RedirectOneTimeTokenGenerationSuccessHandler(String redirectUrl) {
 		Assert.hasText(redirectUrl, "redirectUrl cannot be empty or null");
 		Assert.hasText(redirectUrl, "redirectUrl cannot be empty or null");
 		this.redirectUrl = redirectUrl;
 		this.redirectUrl = redirectUrl;
 	}
 	}

+ 1 - 1
web/src/main/java/org/springframework/security/web/authentication/ui/DefaultLoginPageGeneratingFilter.java

@@ -157,7 +157,7 @@ public class DefaultLoginPageGeneratingFilter extends GenericFilterBean {
 		this.authenticationUrl = authenticationUrl;
 		this.authenticationUrl = authenticationUrl;
 	}
 	}
 
 
-	public void setGenerateOneTimeTokenUrl(String generateOneTimeTokenUrl) {
+	public void setOneTimeTokenGenerationUrl(String generateOneTimeTokenUrl) {
 		this.generateOneTimeTokenUrl = generateOneTimeTokenUrl;
 		this.generateOneTimeTokenUrl = generateOneTimeTokenUrl;
 	}
 	}
 
 

+ 2 - 2
web/src/main/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilter.java

@@ -43,10 +43,10 @@ public final class GenerateOneTimeTokenWebFilter implements WebFilter {
 
 
 	private ServerWebExchangeMatcher matcher = ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, "/ott/generate");
 	private ServerWebExchangeMatcher matcher = ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, "/ott/generate");
 
 
-	private final ServerGeneratedOneTimeTokenHandler generatedOneTimeTokenHandler;
+	private final ServerOneTimeTokenGenerationSuccessHandler generatedOneTimeTokenHandler;
 
 
 	public GenerateOneTimeTokenWebFilter(ReactiveOneTimeTokenService oneTimeTokenService,
 	public GenerateOneTimeTokenWebFilter(ReactiveOneTimeTokenService oneTimeTokenService,
-			ServerGeneratedOneTimeTokenHandler generatedOneTimeTokenHandler) {
+			ServerOneTimeTokenGenerationSuccessHandler generatedOneTimeTokenHandler) {
 		Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
 		Assert.notNull(generatedOneTimeTokenHandler, "generatedOneTimeTokenHandler cannot be null");
 		Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
 		Assert.notNull(oneTimeTokenService, "oneTimeTokenService cannot be null");
 		this.generatedOneTimeTokenHandler = generatedOneTimeTokenHandler;
 		this.generatedOneTimeTokenHandler = generatedOneTimeTokenHandler;

+ 1 - 1
web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerGeneratedOneTimeTokenHandler.java → web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerOneTimeTokenGenerationSuccessHandler.java

@@ -28,7 +28,7 @@ import org.springframework.web.server.ServerWebExchange;
  * @since 6.4
  * @since 6.4
  */
  */
 @FunctionalInterface
 @FunctionalInterface
-public interface ServerGeneratedOneTimeTokenHandler {
+public interface ServerOneTimeTokenGenerationSuccessHandler {
 
 
 	/**
 	/**
 	 * Handles generated one-time tokens
 	 * Handles generated one-time tokens

+ 5 - 4
web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerRedirectGeneratedOneTimeTokenHandler.java → web/src/main/java/org/springframework/security/web/server/authentication/ott/ServerRedirectOneTimeTokenGenerationSuccessHandler.java

@@ -27,19 +27,20 @@ import org.springframework.util.Assert;
 import org.springframework.web.server.ServerWebExchange;
 import org.springframework.web.server.ServerWebExchange;
 
 
 /**
 /**
- * A {@link ServerGeneratedOneTimeTokenHandler} that performs a redirect to a specific
- * location
+ * A {@link ServerOneTimeTokenGenerationSuccessHandler} that performs a redirect to a
+ * specific location
  *
  *
  * @author Max Batischev
  * @author Max Batischev
  * @since 6.4
  * @since 6.4
  */
  */
-public final class ServerRedirectGeneratedOneTimeTokenHandler implements ServerGeneratedOneTimeTokenHandler {
+public final class ServerRedirectOneTimeTokenGenerationSuccessHandler
+		implements ServerOneTimeTokenGenerationSuccessHandler {
 
 
 	private final ServerRedirectStrategy redirectStrategy = new DefaultServerRedirectStrategy();
 	private final ServerRedirectStrategy redirectStrategy = new DefaultServerRedirectStrategy();
 
 
 	private final URI redirectUri;
 	private final URI redirectUri;
 
 
-	public ServerRedirectGeneratedOneTimeTokenHandler(String redirectUri) {
+	public ServerRedirectOneTimeTokenGenerationSuccessHandler(String redirectUri) {
 		Assert.hasText(redirectUri, "redirectUri cannot be empty or null");
 		Assert.hasText(redirectUri, "redirectUri cannot be empty or null");
 		this.redirectUri = URI.create(redirectUri);
 		this.redirectUri = URI.create(redirectUri);
 	}
 	}

+ 1 - 1
web/src/test/java/org/springframework/security/web/authentication/DefaultLoginPageGeneratingFilterTests.java

@@ -192,7 +192,7 @@ public class DefaultLoginPageGeneratingFilterTests {
 		DefaultLoginPageGeneratingFilter filter = new DefaultLoginPageGeneratingFilter();
 		DefaultLoginPageGeneratingFilter filter = new DefaultLoginPageGeneratingFilter();
 		filter.setLoginPageUrl(DefaultLoginPageGeneratingFilter.DEFAULT_LOGIN_PAGE_URL);
 		filter.setLoginPageUrl(DefaultLoginPageGeneratingFilter.DEFAULT_LOGIN_PAGE_URL);
 		filter.setOneTimeTokenEnabled(true);
 		filter.setOneTimeTokenEnabled(true);
-		filter.setGenerateOneTimeTokenUrl("/ott/authenticate");
+		filter.setOneTimeTokenGenerationUrl("/ott/authenticate");
 		MockHttpServletResponse response = new MockHttpServletResponse();
 		MockHttpServletResponse response = new MockHttpServletResponse();
 		filter.doFilter(new MockHttpServletRequest("GET", "/login"), response, this.chain);
 		filter.doFilter(new MockHttpServletRequest("GET", "/login"), response, this.chain);
 		assertThat(response.getContentAsString()).contains("Request a One-Time Token");
 		assertThat(response.getContentAsString()).contains("Request a One-Time Token");

+ 8 - 6
web/src/test/java/org/springframework/security/web/authentication/ott/RedirectGeneratedOneTimeTokenHandlerTests.java → web/src/test/java/org/springframework/security/web/authentication/ott/RedirectOneTimeTokenGenerationSuccessHandlerTests.java

@@ -29,15 +29,16 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 
 
 /**
 /**
- * Tests for {@link RedirectGeneratedOneTimeTokenHandler}
+ * Tests for {@link RedirectOneTimeTokenGenerationSuccessHandler}
  *
  *
  * @author Marcus da Coregio
  * @author Marcus da Coregio
  */
  */
-class RedirectGeneratedOneTimeTokenHandlerTests {
+class RedirectOneTimeTokenGenerationSuccessHandlerTests {
 
 
 	@Test
 	@Test
 	void handleThenRedirectToDefaultLocation() throws IOException {
 	void handleThenRedirectToDefaultLocation() throws IOException {
-		RedirectGeneratedOneTimeTokenHandler handler = new RedirectGeneratedOneTimeTokenHandler("/login/ott");
+		RedirectOneTimeTokenGenerationSuccessHandler handler = new RedirectOneTimeTokenGenerationSuccessHandler(
+				"/login/ott");
 		MockHttpServletResponse response = new MockHttpServletResponse();
 		MockHttpServletResponse response = new MockHttpServletResponse();
 		handler.handle(new MockHttpServletRequest(), response, new DefaultOneTimeToken("token", "user", Instant.now()));
 		handler.handle(new MockHttpServletRequest(), response, new DefaultOneTimeToken("token", "user", Instant.now()));
 		assertThat(response.getRedirectedUrl()).isEqualTo("/login/ott");
 		assertThat(response.getRedirectedUrl()).isEqualTo("/login/ott");
@@ -46,16 +47,17 @@ class RedirectGeneratedOneTimeTokenHandlerTests {
 	@Test
 	@Test
 	void handleWhenUrlChangedThenRedirectToUrl() throws IOException {
 	void handleWhenUrlChangedThenRedirectToUrl() throws IOException {
 		MockHttpServletResponse response = new MockHttpServletResponse();
 		MockHttpServletResponse response = new MockHttpServletResponse();
-		RedirectGeneratedOneTimeTokenHandler handler = new RedirectGeneratedOneTimeTokenHandler("/redirected");
+		RedirectOneTimeTokenGenerationSuccessHandler handler = new RedirectOneTimeTokenGenerationSuccessHandler(
+				"/redirected");
 		handler.handle(new MockHttpServletRequest(), response, new DefaultOneTimeToken("token", "user", Instant.now()));
 		handler.handle(new MockHttpServletRequest(), response, new DefaultOneTimeToken("token", "user", Instant.now()));
 		assertThat(response.getRedirectedUrl()).isEqualTo("/redirected");
 		assertThat(response.getRedirectedUrl()).isEqualTo("/redirected");
 	}
 	}
 
 
 	@Test
 	@Test
 	void setRedirectUrlWhenNullOrEmptyThenException() {
 	void setRedirectUrlWhenNullOrEmptyThenException() {
-		assertThatIllegalArgumentException().isThrownBy(() -> new RedirectGeneratedOneTimeTokenHandler(null))
+		assertThatIllegalArgumentException().isThrownBy(() -> new RedirectOneTimeTokenGenerationSuccessHandler(null))
 			.withMessage("redirectUrl cannot be empty or null");
 			.withMessage("redirectUrl cannot be empty or null");
-		assertThatIllegalArgumentException().isThrownBy(() -> new RedirectGeneratedOneTimeTokenHandler(""))
+		assertThatIllegalArgumentException().isThrownBy(() -> new RedirectOneTimeTokenGenerationSuccessHandler(""))
 			.withMessage("redirectUrl cannot be empty or null");
 			.withMessage("redirectUrl cannot be empty or null");
 	}
 	}
 
 

+ 1 - 1
web/src/test/java/org/springframework/security/web/server/authentication/ott/GenerateOneTimeTokenWebFilterTests.java

@@ -45,7 +45,7 @@ public class GenerateOneTimeTokenWebFilterTests {
 
 
 	private final ReactiveOneTimeTokenService oneTimeTokenService = mock(ReactiveOneTimeTokenService.class);
 	private final ReactiveOneTimeTokenService oneTimeTokenService = mock(ReactiveOneTimeTokenService.class);
 
 
-	private final ServerRedirectGeneratedOneTimeTokenHandler generatedOneTimeTokenHandler = new ServerRedirectGeneratedOneTimeTokenHandler(
+	private final ServerRedirectOneTimeTokenGenerationSuccessHandler generatedOneTimeTokenHandler = new ServerRedirectOneTimeTokenGenerationSuccessHandler(
 			"/login/ott");
 			"/login/ott");
 
 
 	private static final String TOKEN = "token";
 	private static final String TOKEN = "token";

+ 10 - 6
web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerRedirectGeneratedOneTimeTokenHandlerTests.java → web/src/test/java/org/springframework/security/web/server/authentication/ott/ServerRedirectOneTimeTokenGenerationSuccessHandlerTests.java

@@ -29,11 +29,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 
 
 /**
 /**
- * Tests for {@link ServerRedirectGeneratedOneTimeTokenHandler}
+ * Tests for {@link ServerRedirectOneTimeTokenGenerationSuccessHandler}
  *
  *
  * @author Max Batischev
  * @author Max Batischev
  */
  */
-public class ServerRedirectGeneratedOneTimeTokenHandlerTests {
+public class ServerRedirectOneTimeTokenGenerationSuccessHandlerTests {
 
 
 	private static final String TOKEN = "token";
 	private static final String TOKEN = "token";
 
 
@@ -43,7 +43,8 @@ public class ServerRedirectGeneratedOneTimeTokenHandlerTests {
 
 
 	@Test
 	@Test
 	void handleThenRedirectToDefaultLocation() {
 	void handleThenRedirectToDefaultLocation() {
-		ServerGeneratedOneTimeTokenHandler handler = new ServerRedirectGeneratedOneTimeTokenHandler("/login/ott");
+		ServerOneTimeTokenGenerationSuccessHandler handler = new ServerRedirectOneTimeTokenGenerationSuccessHandler(
+				"/login/ott");
 		MockServerWebExchange webExchange = MockServerWebExchange.from(this.request);
 		MockServerWebExchange webExchange = MockServerWebExchange.from(this.request);
 
 
 		handler.handle(webExchange, new DefaultOneTimeToken(TOKEN, USERNAME, Instant.now())).block();
 		handler.handle(webExchange, new DefaultOneTimeToken(TOKEN, USERNAME, Instant.now())).block();
@@ -54,7 +55,8 @@ public class ServerRedirectGeneratedOneTimeTokenHandlerTests {
 
 
 	@Test
 	@Test
 	void handleWhenUrlChangedThenRedirectToUrl() {
 	void handleWhenUrlChangedThenRedirectToUrl() {
-		ServerGeneratedOneTimeTokenHandler handler = new ServerRedirectGeneratedOneTimeTokenHandler("/redirected");
+		ServerOneTimeTokenGenerationSuccessHandler handler = new ServerRedirectOneTimeTokenGenerationSuccessHandler(
+				"/redirected");
 		MockServerWebExchange webExchange = MockServerWebExchange.from(this.request);
 		MockServerWebExchange webExchange = MockServerWebExchange.from(this.request);
 
 
 		handler.handle(webExchange, new DefaultOneTimeToken(TOKEN, USERNAME, Instant.now())).block();
 		handler.handle(webExchange, new DefaultOneTimeToken(TOKEN, USERNAME, Instant.now())).block();
@@ -65,9 +67,11 @@ public class ServerRedirectGeneratedOneTimeTokenHandlerTests {
 
 
 	@Test
 	@Test
 	void setRedirectUrlWhenNullOrEmptyThenException() {
 	void setRedirectUrlWhenNullOrEmptyThenException() {
-		assertThatIllegalArgumentException().isThrownBy(() -> new ServerRedirectGeneratedOneTimeTokenHandler(null))
+		assertThatIllegalArgumentException()
+			.isThrownBy(() -> new ServerRedirectOneTimeTokenGenerationSuccessHandler(null))
 			.withMessage("redirectUri cannot be empty or null");
 			.withMessage("redirectUri cannot be empty or null");
-		assertThatIllegalArgumentException().isThrownBy(() -> new ServerRedirectGeneratedOneTimeTokenHandler(""))
+		assertThatIllegalArgumentException()
+			.isThrownBy(() -> new ServerRedirectOneTimeTokenGenerationSuccessHandler(""))
 			.withMessage("redirectUri cannot be empty or null");
 			.withMessage("redirectUri cannot be empty or null");
 	}
 	}