31
31
import org .springframework .security .authentication .ott .InMemoryOneTimeTokenService ;
32
32
import org .springframework .security .authentication .ott .OneTimeToken ;
33
33
import org .springframework .security .authentication .ott .OneTimeTokenAuthenticationProvider ;
34
- import org .springframework .security .authentication .ott .OneTimeTokenGenerateRequest ;
35
34
import org .springframework .security .authentication .ott .OneTimeTokenService ;
36
35
import org .springframework .security .config .Customizer ;
37
36
import org .springframework .security .config .annotation .web .HttpSecurityBuilder ;
44
43
import org .springframework .security .web .authentication .AuthenticationSuccessHandler ;
45
44
import org .springframework .security .web .authentication .SavedRequestAwareAuthenticationSuccessHandler ;
46
45
import org .springframework .security .web .authentication .SimpleUrlAuthenticationFailureHandler ;
47
- import org .springframework .security .web .authentication .ott .GeneratedOneTimeTokenSuccessHandler ;
46
+ import org .springframework .security .web .authentication .ott .GenerateOneTimeTokenFilter ;
47
+ import org .springframework .security .web .authentication .ott .GeneratedOneTimeTokenHandler ;
48
48
import org .springframework .security .web .authentication .ott .OneTimeTokenAuthenticationConverter ;
49
- import org .springframework .security .web .authentication .ott .OneTimeTokenGenerateFilter ;
50
- import org .springframework .security .web .authentication .ott .OneTimeTokenGenerateRequestResolver ;
51
- import org .springframework .security .web .authentication .ott .RedirectGeneratedOneTimeTokenSuccessHandler ;
52
- import org .springframework .security .web .authentication .ott .RequestParameterOneTimeTokenGenerateRequestResolver ;
49
+ import org .springframework .security .web .authentication .ott .RedirectGeneratedOneTimeTokenHandler ;
53
50
import org .springframework .security .web .authentication .ui .DefaultLoginPageGeneratingFilter ;
54
51
import org .springframework .security .web .authentication .ui .DefaultOneTimeTokenSubmitPageGeneratingFilter ;
55
52
import org .springframework .security .web .context .HttpSessionSecurityContextRepository ;
63
60
public final class OneTimeTokenLoginConfigurer <H extends HttpSecurityBuilder <H >>
64
61
extends AbstractHttpConfigurer <OneTimeTokenLoginConfigurer <H >, H > {
65
62
66
- private static final RedirectGeneratedOneTimeTokenSuccessHandler DEFAULT_GENERATED_OTT_SUCCESS_HANDLER = new RedirectGeneratedOneTimeTokenSuccessHandler (
63
+ private static final RedirectGeneratedOneTimeTokenHandler DEFAULT_GENERATED_OTT_SUCCESS_HANDLER = new RedirectGeneratedOneTimeTokenHandler (
67
64
"/login/ott" );
68
65
69
66
private final Log logger = LogFactory .getLog (getClass ());
@@ -78,20 +75,18 @@ public final class OneTimeTokenLoginConfigurer<H extends HttpSecurityBuilder<H>>
78
75
79
76
private AuthenticationSuccessHandler authenticationSuccessHandler = new SavedRequestAwareAuthenticationSuccessHandler ();
80
77
81
- private String submitPageUrl = "/login/ott" ;
78
+ private String defaultSubmitPageUrl = "/login/ott" ;
82
79
83
80
private boolean submitPageEnabled = true ;
84
81
85
82
private String loginProcessingUrl = "/login/ott" ;
86
83
87
84
private String generateUrl = "/ott/generate" ;
88
85
89
- private GeneratedOneTimeTokenSuccessHandler generatedOneTimeTokenSuccessHandler = DEFAULT_GENERATED_OTT_SUCCESS_HANDLER ;
86
+ private GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler = DEFAULT_GENERATED_OTT_SUCCESS_HANDLER ;
90
87
91
88
private AuthenticationProvider authenticationProvider ;
92
89
93
- private OneTimeTokenGenerateRequestResolver oneTimeTokenGenerateRequestResolver = new RequestParameterOneTimeTokenGenerateRequestResolver ();
94
-
95
90
public OneTimeTokenLoginConfigurer (ApplicationContext context ) {
96
91
this .context = context ;
97
92
}
@@ -110,7 +105,7 @@ private void configureDefaultLoginPage(H http) {
110
105
return ;
111
106
}
112
107
loginPageGeneratingFilter .setOneTimeTokenEnabled (true );
113
- loginPageGeneratingFilter .setOneTimeTokenAuthenticationRequestUrl (this .generateUrl );
108
+ loginPageGeneratingFilter .setGenerateOneTimeTokenUrl (this .generateUrl );
114
109
if (this .authenticationFailureHandler == null
115
110
&& StringUtils .hasText (loginPageGeneratingFilter .getLoginPageUrl ())) {
116
111
this .authenticationFailureHandler = new SimpleUrlAuthenticationFailureHandler (
@@ -145,23 +140,21 @@ private SecurityContextRepository getSecurityContextRepository(H http) {
145
140
}
146
141
147
142
private void configureOttGenerateFilter (H http ) {
148
- OneTimeTokenGenerateFilter generateFilter = new OneTimeTokenGenerateFilter (getOneTimeTokenService (http ));
149
- generateFilter .setOneTimeTokenGenerateRequestResolver (this .oneTimeTokenGenerateRequestResolver );
150
- generateFilter .setGeneratedOneTimeTokenSuccessHandler (getGeneratedOneTimeTokenSuccessHandler ());
143
+ GenerateOneTimeTokenFilter generateFilter = new GenerateOneTimeTokenFilter (getOneTimeTokenService (http ));
144
+ generateFilter .setGeneratedOneTimeTokenHandler (getGeneratedOneTimeTokenHandler ());
151
145
generateFilter .setRequestMatcher (antMatcher (HttpMethod .POST , this .generateUrl ));
152
146
http .addFilter (postProcess (generateFilter ));
153
147
}
154
148
155
- private GeneratedOneTimeTokenSuccessHandler getGeneratedOneTimeTokenSuccessHandler () {
156
- if (this .generatedOneTimeTokenSuccessHandler == DEFAULT_GENERATED_OTT_SUCCESS_HANDLER ) {
157
- this .logger
158
- .debug ("""
159
- Using RedirectGeneratedOneTimeTokenSuccessHandler as the default GeneratedOneTimeTokenSuccessHandler.
160
- Note that this implementation does not send the one-time token to the user, therefore, consider
161
- providing your own implementation.
162
- """ );
149
+ private GeneratedOneTimeTokenHandler getGeneratedOneTimeTokenHandler () {
150
+ if (this .generatedOneTimeTokenHandler == DEFAULT_GENERATED_OTT_SUCCESS_HANDLER ) {
151
+ this .logger .debug ("""
152
+ Using %s as the default GeneratedOneTimeTokenHandler.
153
+ Note that this implementation does not send the one-time token to the user, therefore, consider
154
+ providing your own implementation.
155
+ """ .formatted (DEFAULT_GENERATED_OTT_SUCCESS_HANDLER .getClass ().getSimpleName ()));
163
156
}
164
- return this .generatedOneTimeTokenSuccessHandler ;
157
+ return this .generatedOneTimeTokenHandler ;
165
158
}
166
159
167
160
private void configureSubmitPage (H http ) {
@@ -170,7 +163,7 @@ private void configureSubmitPage(H http) {
170
163
}
171
164
DefaultOneTimeTokenSubmitPageGeneratingFilter submitPage = new DefaultOneTimeTokenSubmitPageGeneratingFilter ();
172
165
submitPage .setResolveHiddenInputs (this ::hiddenInputs );
173
- submitPage .setRequestMatcher (antMatcher (HttpMethod .GET , this .submitPageUrl ));
166
+ submitPage .setRequestMatcher (antMatcher (HttpMethod .GET , this .defaultSubmitPageUrl ));
174
167
submitPage .setLoginProcessingUrl (this .loginProcessingUrl );
175
168
http .addFilter (postProcess (submitPage ));
176
169
}
@@ -185,19 +178,6 @@ private AuthenticationProvider getAuthenticationProvider(H http) {
185
178
return this .authenticationProvider ;
186
179
}
187
180
188
- /**
189
- * Specifies the {@link OneTimeTokenGenerateRequestResolver} to use to resolve a
190
- * {@link OneTimeTokenGenerateRequest}. Defaults to
191
- * {@link RequestParameterOneTimeTokenGenerateRequestResolver}
192
- * @param oneTimeTokenGenerateRequestResolver
193
- */
194
- public OneTimeTokenLoginConfigurer <H > oneTimeTokenGenerationRequestResolver (
195
- OneTimeTokenGenerateRequestResolver oneTimeTokenGenerateRequestResolver ) {
196
- Assert .notNull (oneTimeTokenGenerateRequestResolver , "oneTimeTokenGenerationRequestResolver cannot be null" );
197
- this .oneTimeTokenGenerateRequestResolver = oneTimeTokenGenerateRequestResolver ;
198
- return this ;
199
- }
200
-
201
181
/**
202
182
* Specifies the {@link AuthenticationProvider} to use when authenticating the user.
203
183
* @param authenticationProvider
@@ -220,17 +200,17 @@ public OneTimeTokenLoginConfigurer<H> generateUrl(String generateUrl) {
220
200
}
221
201
222
202
/**
223
- * Specifies strategy to be used for successful generated one-time tokens. By default,
224
- * a redirect will be performed to {@code POST /login/ott} using the
225
- * {@link RedirectGeneratedOneTimeTokenSuccessHandler }. It is often needed to provide
226
- * your own implementation of this interface so the one-time token is also delivered
227
- * to the user.
228
- * @param generatedOneTimeTokenSuccessHandler
203
+ * Specifies strategy to be used to handle generated one-time tokens. By default, a
204
+ * redirect will be performed to {@code POST /login/ott} using the
205
+ * {@link RedirectGeneratedOneTimeTokenHandler }. It is often needed to provide your
206
+ * own implementation of this interface so the one-time token is also delivered to the
207
+ * user.
208
+ * @param generatedOneTimeTokenHandler
229
209
*/
230
- public OneTimeTokenLoginConfigurer <H > generatedOneTimeTokenSuccessHandler (
231
- GeneratedOneTimeTokenSuccessHandler generatedOneTimeTokenSuccessHandler ) {
232
- Assert .notNull (generatedOneTimeTokenSuccessHandler , "generatedOneTimeTokenSuccessHandler cannot be null" );
233
- this .generatedOneTimeTokenSuccessHandler = generatedOneTimeTokenSuccessHandler ;
210
+ public OneTimeTokenLoginConfigurer <H > generatedOneTimeTokenHandler (
211
+ GeneratedOneTimeTokenHandler generatedOneTimeTokenHandler ) {
212
+ Assert .notNull (generatedOneTimeTokenHandler , "generatedOneTimeTokenHandler cannot be null" );
213
+ this .generatedOneTimeTokenHandler = generatedOneTimeTokenHandler ;
234
214
return this ;
235
215
}
236
216
@@ -253,20 +233,22 @@ public OneTimeTokenLoginConfigurer<H> loginProcessingUrl(String loginProcessingU
253
233
* configured.
254
234
* @param show
255
235
*/
256
- public OneTimeTokenLoginConfigurer <H > showSubmitPage (boolean show ) {
236
+ public OneTimeTokenLoginConfigurer <H > showDefaultSubmitPage (boolean show ) {
257
237
this .submitPageEnabled = show ;
258
238
return this ;
259
239
}
260
240
261
241
/**
262
242
* Sets the URL that the default submit page will be generated. Defaults to
263
- * {@code /login/ott}. Note that if you don't want to generate the default submit page
264
- * you should use {@link #showSubmitPage(boolean)}.
243
+ * {@code /login/ott}. If you don't want to generate the default submit page you
244
+ * should use {@link #showDefaultSubmitPage(boolean)}. Note that this method always
245
+ * invoke {@link #showDefaultSubmitPage(boolean)} passing {@code true}.
265
246
* @param submitPageUrl
266
247
*/
267
- public OneTimeTokenLoginConfigurer <H > submitPageUrl (String submitPageUrl ) {
248
+ public OneTimeTokenLoginConfigurer <H > defaultSubmitPageUrl (String submitPageUrl ) {
268
249
Assert .hasText (submitPageUrl , "submitPageUrl cannot be null or empty" );
269
- this .submitPageUrl = submitPageUrl ;
250
+ this .defaultSubmitPageUrl = submitPageUrl ;
251
+ showDefaultSubmitPage (true );
270
252
return this ;
271
253
}
272
254
0 commit comments