|  | @@ -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");
 | 
	
		
			
				|  |  |   * you may not use this file except in compliance with the License.
 | 
	
	
		
			
				|  | @@ -18,6 +18,7 @@ package org.springframework.security.config.annotation.web.configurers.ott;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.util.Collections;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  | +import java.util.Objects;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import jakarta.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -25,6 +26,7 @@ import org.springframework.context.ApplicationContext;
 | 
	
		
			
				|  |  |  import org.springframework.http.HttpMethod;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.AuthenticationManager;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.AuthenticationProvider;
 | 
	
		
			
				|  |  | +import org.springframework.security.authentication.ott.GenerateOneTimeTokenRequest;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.ott.InMemoryOneTimeTokenService;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.ott.OneTimeToken;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationProvider;
 | 
	
	
		
			
				|  | @@ -40,7 +42,9 @@ import org.springframework.security.web.authentication.AuthenticationFilter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
 | 
	
		
			
				|  |  | +import org.springframework.security.web.authentication.ott.DefaultGenerateOneTimeTokenRequestResolver;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenFilter;
 | 
	
		
			
				|  |  | +import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenRequestResolver;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.ott.OneTimeTokenAuthenticationConverter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
 | 
	
	
		
			
				|  | @@ -79,6 +83,8 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private AuthenticationProvider authenticationProvider;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	private GenerateOneTimeTokenRequestResolver requestResolver;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	public OneTimeTokenLoginConfigurer(ApplicationContext context) {
 | 
	
		
			
				|  |  |  		this.context = context;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -135,6 +141,7 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  		GenerateOneTimeTokenFilter generateFilter = new GenerateOneTimeTokenFilter(getOneTimeTokenService(http),
 | 
	
		
			
				|  |  |  				getOneTimeTokenGenerationSuccessHandler(http));
 | 
	
		
			
				|  |  |  		generateFilter.setRequestMatcher(antMatcher(HttpMethod.POST, this.tokenGeneratingUrl));
 | 
	
		
			
				|  |  | +		generateFilter.setRequestResolver(getGenerateRequestResolver(http));
 | 
	
		
			
				|  |  |  		http.addFilter(postProcess(generateFilter));
 | 
	
		
			
				|  |  |  		http.addFilter(DefaultResourcesFilter.css());
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -301,6 +308,28 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  		return this.authenticationFailureHandler;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Use this {@link GenerateOneTimeTokenRequestResolver} when resolving
 | 
	
		
			
				|  |  | +	 * {@link GenerateOneTimeTokenRequest} from {@link HttpServletRequest}. By default,
 | 
	
		
			
				|  |  | +	 * the {@link DefaultGenerateOneTimeTokenRequestResolver} is used.
 | 
	
		
			
				|  |  | +	 * @param requestResolver the {@link GenerateOneTimeTokenRequestResolver}
 | 
	
		
			
				|  |  | +	 * @since 6.5
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public OneTimeTokenLoginConfigurer<H> generateRequestResolver(GenerateOneTimeTokenRequestResolver requestResolver) {
 | 
	
		
			
				|  |  | +		Assert.notNull(requestResolver, "requestResolver cannot be null");
 | 
	
		
			
				|  |  | +		this.requestResolver = requestResolver;
 | 
	
		
			
				|  |  | +		return this;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	private GenerateOneTimeTokenRequestResolver getGenerateRequestResolver(H http) {
 | 
	
		
			
				|  |  | +		if (this.requestResolver != null) {
 | 
	
		
			
				|  |  | +			return this.requestResolver;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		GenerateOneTimeTokenRequestResolver bean = getBeanOrNull(http, GenerateOneTimeTokenRequestResolver.class);
 | 
	
		
			
				|  |  | +		this.requestResolver = Objects.requireNonNullElseGet(bean, DefaultGenerateOneTimeTokenRequestResolver::new);
 | 
	
		
			
				|  |  | +		return this.requestResolver;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	private OneTimeTokenService getOneTimeTokenService(H http) {
 | 
	
		
			
				|  |  |  		if (this.oneTimeTokenService != null) {
 | 
	
		
			
				|  |  |  			return this.oneTimeTokenService;
 |