|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2024 the original author or authors. |
| 2 | + * Copyright 2002-2025 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
18 | 18 |
|
19 | 19 | import java.util.Collections;
|
20 | 20 | import java.util.Map;
|
| 21 | +import java.util.Objects; |
21 | 22 |
|
22 | 23 | import jakarta.servlet.http.HttpServletRequest;
|
23 | 24 |
|
24 | 25 | import org.springframework.context.ApplicationContext;
|
25 | 26 | import org.springframework.http.HttpMethod;
|
26 | 27 | import org.springframework.security.authentication.AuthenticationManager;
|
27 | 28 | import org.springframework.security.authentication.AuthenticationProvider;
|
| 29 | +import org.springframework.security.authentication.ott.GenerateOneTimeTokenRequest; |
28 | 30 | import org.springframework.security.authentication.ott.InMemoryOneTimeTokenService;
|
29 | 31 | import org.springframework.security.authentication.ott.OneTimeToken;
|
30 | 32 | import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationProvider;
|
|
40 | 42 | import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
|
41 | 43 | import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
|
42 | 44 | import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
|
| 45 | +import org.springframework.security.web.authentication.ott.DefaultGenerateOneTimeTokenRequestResolver; |
43 | 46 | import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenFilter;
|
| 47 | +import org.springframework.security.web.authentication.ott.GenerateOneTimeTokenRequestResolver; |
44 | 48 | import org.springframework.security.web.authentication.ott.OneTimeTokenAuthenticationConverter;
|
45 | 49 | import org.springframework.security.web.authentication.ott.OneTimeTokenGenerationSuccessHandler;
|
46 | 50 | import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter;
|
@@ -79,6 +83,8 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
|
79 | 83 |
|
80 | 84 | private AuthenticationProvider authenticationProvider;
|
81 | 85 |
|
| 86 | + private GenerateOneTimeTokenRequestResolver requestResolver; |
| 87 | + |
82 | 88 | public OneTimeTokenLoginConfigurer(ApplicationContext context) {
|
83 | 89 | this.context = context;
|
84 | 90 | }
|
@@ -135,6 +141,7 @@ private void configureOttGenerateFilter(H http) {
|
135 | 141 | GenerateOneTimeTokenFilter generateFilter = new GenerateOneTimeTokenFilter(getOneTimeTokenService(http),
|
136 | 142 | getOneTimeTokenGenerationSuccessHandler(http));
|
137 | 143 | generateFilter.setRequestMatcher(antMatcher(HttpMethod.POST, this.tokenGeneratingUrl));
|
| 144 | + generateFilter.setRequestResolver(getGenerateRequestResolver(http)); |
138 | 145 | http.addFilter(postProcess(generateFilter));
|
139 | 146 | http.addFilter(DefaultResourcesFilter.css());
|
140 | 147 | }
|
@@ -301,6 +308,28 @@ private AuthenticationFailureHandler getAuthenticationFailureHandler() {
|
301 | 308 | return this.authenticationFailureHandler;
|
302 | 309 | }
|
303 | 310 |
|
| 311 | + /** |
| 312 | + * Use this {@link GenerateOneTimeTokenRequestResolver} when resolving |
| 313 | + * {@link GenerateOneTimeTokenRequest} from {@link HttpServletRequest}. By default, |
| 314 | + * the {@link DefaultGenerateOneTimeTokenRequestResolver} is used. |
| 315 | + * @param requestResolver the {@link GenerateOneTimeTokenRequestResolver} |
| 316 | + * @since 6.5 |
| 317 | + */ |
| 318 | + public OneTimeTokenLoginConfigurer<H> generateRequestResolver(GenerateOneTimeTokenRequestResolver requestResolver) { |
| 319 | + Assert.notNull(requestResolver, "requestResolver cannot be null"); |
| 320 | + this.requestResolver = requestResolver; |
| 321 | + return this; |
| 322 | + } |
| 323 | + |
| 324 | + private GenerateOneTimeTokenRequestResolver getGenerateRequestResolver(H http) { |
| 325 | + if (this.requestResolver != null) { |
| 326 | + return this.requestResolver; |
| 327 | + } |
| 328 | + GenerateOneTimeTokenRequestResolver bean = getBeanOrNull(http, GenerateOneTimeTokenRequestResolver.class); |
| 329 | + this.requestResolver = Objects.requireNonNullElseGet(bean, DefaultGenerateOneTimeTokenRequestResolver::new); |
| 330 | + return this.requestResolver; |
| 331 | + } |
| 332 | + |
304 | 333 | private OneTimeTokenService getOneTimeTokenService(H http) {
|
305 | 334 | if (this.oneTimeTokenService != null) {
|
306 | 335 | return this.oneTimeTokenService;
|
|
0 commit comments