@@ -236,8 +236,8 @@ final class AuthenticationConfigBuilder {
236
236
237
237
AuthenticationConfigBuilder (Element element , boolean forceAutoConfig , ParserContext pc ,
238
238
SessionCreationPolicy sessionPolicy , BeanReference requestCache , BeanReference authenticationManager ,
239
- BeanReference sessionStrategy , BeanReference portMapper , BeanReference portResolver ,
240
- BeanMetadataElement csrfLogoutHandler ) {
239
+ BeanReference authenticationFilterSecurityContextRepositoryRef , BeanReference sessionStrategy ,
240
+ BeanReference portMapper , BeanReference portResolver , BeanMetadataElement csrfLogoutHandler ) {
241
241
this .httpElt = element ;
242
242
this .pc = pc ;
243
243
this .requestCache = requestCache ;
@@ -251,10 +251,12 @@ final class AuthenticationConfigBuilder {
251
251
createRememberMeFilter (authenticationManager );
252
252
createBasicFilter (authenticationManager );
253
253
createBearerTokenAuthenticationFilter (authenticationManager );
254
- createFormLoginFilter (sessionStrategy , authenticationManager );
255
- createOAuth2ClientFilters (sessionStrategy , requestCache , authenticationManager );
256
- createOpenIDLoginFilter (sessionStrategy , authenticationManager );
257
- createSaml2LoginFilter (authenticationManager );
254
+ createFormLoginFilter (sessionStrategy , authenticationManager , authenticationFilterSecurityContextRepositoryRef );
255
+ createOAuth2ClientFilters (sessionStrategy , requestCache , authenticationManager ,
256
+ authenticationFilterSecurityContextRepositoryRef );
257
+ createOpenIDLoginFilter (sessionStrategy , authenticationManager ,
258
+ authenticationFilterSecurityContextRepositoryRef );
259
+ createSaml2LoginFilter (authenticationManager , authenticationFilterSecurityContextRepositoryRef );
258
260
createX509Filter (authenticationManager );
259
261
createJeeFilter (authenticationManager );
260
262
createLogoutFilter ();
@@ -290,7 +292,8 @@ private void createRememberMeProvider(String key) {
290
292
this .rememberMeProviderRef = new RuntimeBeanReference (id );
291
293
}
292
294
293
- void createFormLoginFilter (BeanReference sessionStrategy , BeanReference authManager ) {
295
+ void createFormLoginFilter (BeanReference sessionStrategy , BeanReference authManager ,
296
+ BeanReference authenticationFilterSecurityContextRepositoryRef ) {
294
297
Element formLoginElt = DomUtils .getChildElementByTagName (this .httpElt , Elements .FORM_LOGIN );
295
298
RootBeanDefinition formFilter = null ;
296
299
if (formLoginElt != null || this .autoConfig ) {
@@ -306,6 +309,10 @@ void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authMana
306
309
if (formFilter != null ) {
307
310
formFilter .getPropertyValues ().addPropertyValue ("allowSessionCreation" , this .allowSessionCreation );
308
311
formFilter .getPropertyValues ().addPropertyValue ("authenticationManager" , authManager );
312
+ if (authenticationFilterSecurityContextRepositoryRef != null ) {
313
+ formFilter .getPropertyValues ().addPropertyValue ("securityContextRepository" ,
314
+ authenticationFilterSecurityContextRepositoryRef );
315
+ }
309
316
// Id is required by login page filter
310
317
this .formFilterId = this .pc .getReaderContext ().generateBeanName (formFilter );
311
318
this .pc .registerBeanComponent (new BeanComponentDefinition (formFilter , this .formFilterId ));
@@ -314,13 +321,15 @@ void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authMana
314
321
}
315
322
316
323
void createOAuth2ClientFilters (BeanReference sessionStrategy , BeanReference requestCache ,
317
- BeanReference authenticationManager ) {
318
- createOAuth2LoginFilter (sessionStrategy , authenticationManager );
319
- createOAuth2ClientFilter (requestCache , authenticationManager );
324
+ BeanReference authenticationManager , BeanReference authenticationFilterSecurityContextRepositoryRef ) {
325
+ createOAuth2LoginFilter (sessionStrategy , authenticationManager ,
326
+ authenticationFilterSecurityContextRepositoryRef );
327
+ createOAuth2ClientFilter (requestCache , authenticationManager , authenticationFilterSecurityContextRepositoryRef );
320
328
registerOAuth2ClientPostProcessors ();
321
329
}
322
330
323
- void createOAuth2LoginFilter (BeanReference sessionStrategy , BeanReference authManager ) {
331
+ void createOAuth2LoginFilter (BeanReference sessionStrategy , BeanReference authManager ,
332
+ BeanReference authenticationFilterSecurityContextRepositoryRef ) {
324
333
Element oauth2LoginElt = DomUtils .getChildElementByTagName (this .httpElt , Elements .OAUTH2_LOGIN );
325
334
if (oauth2LoginElt == null ) {
326
335
return ;
@@ -332,6 +341,10 @@ void createOAuth2LoginFilter(BeanReference sessionStrategy, BeanReference authMa
332
341
BeanDefinition defaultAuthorizedClientRepository = parser .getDefaultAuthorizedClientRepository ();
333
342
registerDefaultAuthorizedClientRepositoryIfNecessary (defaultAuthorizedClientRepository );
334
343
oauth2LoginFilterBean .getPropertyValues ().addPropertyValue ("authenticationManager" , authManager );
344
+ if (authenticationFilterSecurityContextRepositoryRef != null ) {
345
+ oauth2LoginFilterBean .getPropertyValues ().addPropertyValue ("securityContextRepository" ,
346
+ authenticationFilterSecurityContextRepositoryRef );
347
+ }
335
348
336
349
// retrieve the other bean result
337
350
BeanDefinition oauth2LoginAuthProvider = parser .getOAuth2LoginAuthenticationProvider ();
@@ -361,14 +374,15 @@ void createOAuth2LoginFilter(BeanReference sessionStrategy, BeanReference authMa
361
374
this .oauth2LoginOidcAuthenticationProviderRef = new RuntimeBeanReference (oauth2LoginOidcAuthProviderId );
362
375
}
363
376
364
- void createOAuth2ClientFilter (BeanReference requestCache , BeanReference authenticationManager ) {
377
+ void createOAuth2ClientFilter (BeanReference requestCache , BeanReference authenticationManager ,
378
+ BeanReference authenticationFilterSecurityContextRepositoryRef ) {
365
379
Element oauth2ClientElt = DomUtils .getChildElementByTagName (this .httpElt , Elements .OAUTH2_CLIENT );
366
380
if (oauth2ClientElt == null ) {
367
381
return ;
368
382
}
369
383
this .oauth2ClientEnabled = true ;
370
384
OAuth2ClientBeanDefinitionParser parser = new OAuth2ClientBeanDefinitionParser (requestCache ,
371
- authenticationManager );
385
+ authenticationManager , authenticationFilterSecurityContextRepositoryRef );
372
386
parser .parse (oauth2ClientElt , this .pc );
373
387
BeanDefinition defaultAuthorizedClientRepository = parser .getDefaultAuthorizedClientRepository ();
374
388
registerDefaultAuthorizedClientRepositoryIfNecessary (defaultAuthorizedClientRepository );
@@ -413,7 +427,8 @@ private void registerOAuth2ClientPostProcessors() {
413
427
}
414
428
}
415
429
416
- void createOpenIDLoginFilter (BeanReference sessionStrategy , BeanReference authManager ) {
430
+ void createOpenIDLoginFilter (BeanReference sessionStrategy , BeanReference authManager ,
431
+ BeanReference authenticationFilterSecurityContextRepositoryRef ) {
417
432
Element openIDLoginElt = DomUtils .getChildElementByTagName (this .httpElt , Elements .OPENID_LOGIN );
418
433
RootBeanDefinition openIDFilter = null ;
419
434
if (openIDLoginElt != null ) {
@@ -422,6 +437,10 @@ void createOpenIDLoginFilter(BeanReference sessionStrategy, BeanReference authMa
422
437
if (openIDFilter != null ) {
423
438
openIDFilter .getPropertyValues ().addPropertyValue ("allowSessionCreation" , this .allowSessionCreation );
424
439
openIDFilter .getPropertyValues ().addPropertyValue ("authenticationManager" , authManager );
440
+ if (authenticationFilterSecurityContextRepositoryRef != null ) {
441
+ openIDFilter .getPropertyValues ().addPropertyValue ("securityContextRepository" ,
442
+ authenticationFilterSecurityContextRepositoryRef );
443
+ }
425
444
// Required by login page filter
426
445
this .openIDFilterId = this .pc .getReaderContext ().generateBeanName (openIDFilter );
427
446
this .pc .registerBeanComponent (new BeanComponentDefinition (openIDFilter , this .openIDFilterId ));
@@ -430,14 +449,16 @@ void createOpenIDLoginFilter(BeanReference sessionStrategy, BeanReference authMa
430
449
}
431
450
}
432
451
433
- private void createSaml2LoginFilter (BeanReference authenticationManager ) {
452
+ private void createSaml2LoginFilter (BeanReference authenticationManager ,
453
+ BeanReference authenticationFilterSecurityContextRepositoryRef ) {
434
454
Element saml2LoginElt = DomUtils .getChildElementByTagName (this .httpElt , Elements .SAML2_LOGIN );
435
455
if (saml2LoginElt == null ) {
436
456
return ;
437
457
}
438
458
Saml2LoginBeanDefinitionParser parser = new Saml2LoginBeanDefinitionParser (this .csrfIgnoreRequestMatchers ,
439
459
this .portMapper , this .portResolver , this .requestCache , this .allowSessionCreation , authenticationManager ,
440
- this .authenticationProviders , this .defaultEntryPointMappings );
460
+ authenticationFilterSecurityContextRepositoryRef , this .authenticationProviders ,
461
+ this .defaultEntryPointMappings );
441
462
BeanDefinition saml2WebSsoAuthenticationFilter = parser .parse (saml2LoginElt , this .pc );
442
463
this .saml2AuthorizationRequestFilter = parser .getSaml2WebSsoAuthenticationRequestFilter ();
443
464
0 commit comments