|
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.
|
|
29 | 29 | import java.util.Iterator;
|
30 | 30 | import java.util.List;
|
31 | 31 | import java.util.Map;
|
| 32 | +import java.util.Objects; |
32 | 33 | import java.util.UUID;
|
33 | 34 | import java.util.function.Consumer;
|
34 | 35 | import java.util.function.Function;
|
|
53 | 54 | import org.springframework.security.authentication.DelegatingReactiveAuthenticationManager;
|
54 | 55 | import org.springframework.security.authentication.ReactiveAuthenticationManager;
|
55 | 56 | import org.springframework.security.authentication.ReactiveAuthenticationManagerResolver;
|
| 57 | +import org.springframework.security.authentication.ott.GenerateOneTimeTokenRequest; |
56 | 58 | import org.springframework.security.authentication.ott.OneTimeToken;
|
57 | 59 | import org.springframework.security.authentication.ott.reactive.InMemoryReactiveOneTimeTokenService;
|
58 | 60 | import org.springframework.security.authentication.ott.reactive.OneTimeTokenReactiveAuthenticationManager;
|
|
156 | 158 | import org.springframework.security.web.server.authentication.logout.SecurityContextServerLogoutHandler;
|
157 | 159 | import org.springframework.security.web.server.authentication.logout.ServerLogoutHandler;
|
158 | 160 | import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
|
| 161 | +import org.springframework.security.web.server.authentication.ott.DefaultServerGenerateOneTimeTokenRequestResolver; |
159 | 162 | import org.springframework.security.web.server.authentication.ott.GenerateOneTimeTokenWebFilter;
|
| 163 | +import org.springframework.security.web.server.authentication.ott.ServerGenerateOneTimeTokenRequestResolver; |
160 | 164 | import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenAuthenticationConverter;
|
161 | 165 | import org.springframework.security.web.server.authentication.ott.ServerOneTimeTokenGenerationSuccessHandler;
|
162 | 166 | import org.springframework.security.web.server.authorization.AuthorizationContext;
|
@@ -5940,6 +5944,8 @@ public final class OneTimeTokenLoginSpec {
|
5940 | 5944 |
|
5941 | 5945 | private ServerSecurityContextRepository securityContextRepository;
|
5942 | 5946 |
|
| 5947 | + private ServerGenerateOneTimeTokenRequestResolver requestResolver; |
| 5948 | + |
5943 | 5949 | private String loginProcessingUrl = "/login/ott";
|
5944 | 5950 |
|
5945 | 5951 | private String defaultSubmitPageUrl = "/login/ott";
|
@@ -5985,6 +5991,7 @@ private void configureOttGenerateFilter(ServerHttpSecurity http) {
|
5985 | 5991 | getTokenGenerationSuccessHandler());
|
5986 | 5992 | generateFilter
|
5987 | 5993 | .setRequestMatcher(ServerWebExchangeMatchers.pathMatchers(HttpMethod.POST, this.tokenGeneratingUrl));
|
| 5994 | + generateFilter.setGenerateRequestResolver(getRequestResolver()); |
5988 | 5995 | http.addFilterAt(generateFilter, SecurityWebFiltersOrder.ONE_TIME_TOKEN);
|
5989 | 5996 | }
|
5990 | 5997 |
|
@@ -6112,6 +6119,32 @@ public OneTimeTokenLoginSpec authenticationConverter(ServerAuthenticationConvert
|
6112 | 6119 | return this;
|
6113 | 6120 | }
|
6114 | 6121 |
|
| 6122 | + /** |
| 6123 | + * Use this {@link ServerGenerateOneTimeTokenRequestResolver} when resolving |
| 6124 | + * {@link GenerateOneTimeTokenRequest} from {@link ServerWebExchange}. By default, |
| 6125 | + * the {@link DefaultServerGenerateOneTimeTokenRequestResolver} is used. |
| 6126 | + * @param requestResolver the |
| 6127 | + * {@link DefaultServerGenerateOneTimeTokenRequestResolver} to use |
| 6128 | + * @since 6.5 |
| 6129 | + */ |
| 6130 | + public OneTimeTokenLoginSpec generateRequestResolver( |
| 6131 | + ServerGenerateOneTimeTokenRequestResolver requestResolver) { |
| 6132 | + Assert.notNull(requestResolver, "generateRequestResolver cannot be null"); |
| 6133 | + this.requestResolver = requestResolver; |
| 6134 | + return this; |
| 6135 | + } |
| 6136 | + |
| 6137 | + private ServerGenerateOneTimeTokenRequestResolver getRequestResolver() { |
| 6138 | + if (this.requestResolver != null) { |
| 6139 | + return this.requestResolver; |
| 6140 | + } |
| 6141 | + ServerGenerateOneTimeTokenRequestResolver bean = getBeanOrNull( |
| 6142 | + ServerGenerateOneTimeTokenRequestResolver.class); |
| 6143 | + this.requestResolver = Objects.requireNonNullElseGet(bean, |
| 6144 | + DefaultServerGenerateOneTimeTokenRequestResolver::new); |
| 6145 | + return this.requestResolver; |
| 6146 | + } |
| 6147 | + |
6115 | 6148 | /**
|
6116 | 6149 | * Specifies the URL to process the login request, defaults to {@code /login/ott}.
|
6117 | 6150 | * Only POST requests are processed, for that reason make sure that you pass a
|
|
0 commit comments