|
@@ -1,5 +1,5 @@
|
|
/*
|
|
/*
|
|
- * Copyright 2002-2022 the original author or authors.
|
|
|
|
|
|
+ * Copyright 2002-2023 the original author or authors.
|
|
*
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* you may not use this file except in compliance with the License.
|
|
@@ -39,11 +39,10 @@ import org.springframework.security.saml2.provider.service.authentication.logout
|
|
import org.springframework.security.saml2.provider.service.authentication.logout.Saml2LogoutResponseValidator;
|
|
import org.springframework.security.saml2.provider.service.authentication.logout.Saml2LogoutResponseValidator;
|
|
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration;
|
|
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration;
|
|
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
|
|
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
|
|
-import org.springframework.security.saml2.provider.service.web.DefaultRelyingPartyRegistrationResolver;
|
|
|
|
-import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationResolver;
|
|
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.HttpSessionLogoutRequestRepository;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.HttpSessionLogoutRequestRepository;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.OpenSaml4LogoutRequestResolver;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.OpenSaml4LogoutRequestResolver;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.OpenSaml4LogoutResponseResolver;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.OpenSaml4LogoutResponseResolver;
|
|
|
|
+import org.springframework.security.saml2.provider.service.web.authentication.logout.OpenSamlLogoutRequestValidatorParametersResolver;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestFilter;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestFilter;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestRepository;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestRepository;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestResolver;
|
|
import org.springframework.security.saml2.provider.service.web.authentication.logout.Saml2LogoutRequestResolver;
|
|
@@ -216,17 +215,12 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
this.logoutHandlers = logout.getLogoutHandlers();
|
|
this.logoutHandlers = logout.getLogoutHandlers();
|
|
this.logoutSuccessHandler = logout.getLogoutSuccessHandler();
|
|
this.logoutSuccessHandler = logout.getLogoutSuccessHandler();
|
|
}
|
|
}
|
|
- RelyingPartyRegistrationResolver registrations = relyingPartyRegistrationResolver(http);
|
|
|
|
|
|
+ RelyingPartyRegistrationRepository registrations = getRelyingPartyRegistrationRepository(http);
|
|
http.addFilterBefore(createLogoutRequestProcessingFilter(registrations), CsrfFilter.class);
|
|
http.addFilterBefore(createLogoutRequestProcessingFilter(registrations), CsrfFilter.class);
|
|
http.addFilterBefore(createLogoutResponseProcessingFilter(registrations), CsrfFilter.class);
|
|
http.addFilterBefore(createLogoutResponseProcessingFilter(registrations), CsrfFilter.class);
|
|
http.addFilterBefore(createRelyingPartyLogoutFilter(registrations), LogoutFilter.class);
|
|
http.addFilterBefore(createRelyingPartyLogoutFilter(registrations), LogoutFilter.class);
|
|
}
|
|
}
|
|
|
|
|
|
- private RelyingPartyRegistrationResolver relyingPartyRegistrationResolver(H http) {
|
|
|
|
- RelyingPartyRegistrationRepository registrations = getRelyingPartyRegistrationRepository(http);
|
|
|
|
- return new DefaultRelyingPartyRegistrationResolver(registrations);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private RelyingPartyRegistrationRepository getRelyingPartyRegistrationRepository(H http) {
|
|
private RelyingPartyRegistrationRepository getRelyingPartyRegistrationRepository(H http) {
|
|
if (this.relyingPartyRegistrationRepository != null) {
|
|
if (this.relyingPartyRegistrationRepository != null) {
|
|
return this.relyingPartyRegistrationRepository;
|
|
return this.relyingPartyRegistrationRepository;
|
|
@@ -242,18 +236,21 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
}
|
|
}
|
|
|
|
|
|
private Saml2LogoutRequestFilter createLogoutRequestProcessingFilter(
|
|
private Saml2LogoutRequestFilter createLogoutRequestProcessingFilter(
|
|
- RelyingPartyRegistrationResolver registrations) {
|
|
|
|
|
|
+ RelyingPartyRegistrationRepository registrations) {
|
|
LogoutHandler[] logoutHandlers = this.logoutHandlers.toArray(new LogoutHandler[0]);
|
|
LogoutHandler[] logoutHandlers = this.logoutHandlers.toArray(new LogoutHandler[0]);
|
|
Saml2LogoutResponseResolver logoutResponseResolver = createSaml2LogoutResponseResolver(registrations);
|
|
Saml2LogoutResponseResolver logoutResponseResolver = createSaml2LogoutResponseResolver(registrations);
|
|
- Saml2LogoutRequestFilter filter = new Saml2LogoutRequestFilter(registrations,
|
|
|
|
|
|
+ RequestMatcher requestMatcher = createLogoutRequestMatcher();
|
|
|
|
+ OpenSamlLogoutRequestValidatorParametersResolver parameters = new OpenSamlLogoutRequestValidatorParametersResolver(
|
|
|
|
+ registrations);
|
|
|
|
+ parameters.setRequestMatcher(requestMatcher);
|
|
|
|
+ Saml2LogoutRequestFilter filter = new Saml2LogoutRequestFilter(parameters,
|
|
this.logoutRequestConfigurer.logoutRequestValidator(), logoutResponseResolver, logoutHandlers);
|
|
this.logoutRequestConfigurer.logoutRequestValidator(), logoutResponseResolver, logoutHandlers);
|
|
- filter.setLogoutRequestMatcher(createLogoutRequestMatcher());
|
|
|
|
filter.setSecurityContextHolderStrategy(getSecurityContextHolderStrategy());
|
|
filter.setSecurityContextHolderStrategy(getSecurityContextHolderStrategy());
|
|
return postProcess(filter);
|
|
return postProcess(filter);
|
|
}
|
|
}
|
|
|
|
|
|
private Saml2LogoutResponseFilter createLogoutResponseProcessingFilter(
|
|
private Saml2LogoutResponseFilter createLogoutResponseProcessingFilter(
|
|
- RelyingPartyRegistrationResolver registrations) {
|
|
|
|
|
|
+ RelyingPartyRegistrationRepository registrations) {
|
|
Saml2LogoutResponseFilter logoutResponseFilter = new Saml2LogoutResponseFilter(registrations,
|
|
Saml2LogoutResponseFilter logoutResponseFilter = new Saml2LogoutResponseFilter(registrations,
|
|
this.logoutResponseConfigurer.logoutResponseValidator(), this.logoutSuccessHandler);
|
|
this.logoutResponseConfigurer.logoutResponseValidator(), this.logoutSuccessHandler);
|
|
logoutResponseFilter.setLogoutRequestMatcher(createLogoutResponseMatcher());
|
|
logoutResponseFilter.setLogoutRequestMatcher(createLogoutResponseMatcher());
|
|
@@ -261,7 +258,7 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
return postProcess(logoutResponseFilter);
|
|
return postProcess(logoutResponseFilter);
|
|
}
|
|
}
|
|
|
|
|
|
- private LogoutFilter createRelyingPartyLogoutFilter(RelyingPartyRegistrationResolver registrations) {
|
|
|
|
|
|
+ private LogoutFilter createRelyingPartyLogoutFilter(RelyingPartyRegistrationRepository registrations) {
|
|
LogoutHandler[] logoutHandlers = this.logoutHandlers.toArray(new LogoutHandler[0]);
|
|
LogoutHandler[] logoutHandlers = this.logoutHandlers.toArray(new LogoutHandler[0]);
|
|
Saml2RelyingPartyInitiatedLogoutSuccessHandler logoutRequestSuccessHandler = createSaml2LogoutRequestSuccessHandler(
|
|
Saml2RelyingPartyInitiatedLogoutSuccessHandler logoutRequestSuccessHandler = createSaml2LogoutRequestSuccessHandler(
|
|
registrations);
|
|
registrations);
|
|
@@ -290,15 +287,15 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
}
|
|
}
|
|
|
|
|
|
private Saml2RelyingPartyInitiatedLogoutSuccessHandler createSaml2LogoutRequestSuccessHandler(
|
|
private Saml2RelyingPartyInitiatedLogoutSuccessHandler createSaml2LogoutRequestSuccessHandler(
|
|
- RelyingPartyRegistrationResolver relyingPartyRegistrationResolver) {
|
|
|
|
|
|
+ RelyingPartyRegistrationRepository registrations) {
|
|
Saml2LogoutRequestResolver logoutRequestResolver = this.logoutRequestConfigurer
|
|
Saml2LogoutRequestResolver logoutRequestResolver = this.logoutRequestConfigurer
|
|
- .logoutRequestResolver(relyingPartyRegistrationResolver);
|
|
|
|
|
|
+ .logoutRequestResolver(registrations);
|
|
return new Saml2RelyingPartyInitiatedLogoutSuccessHandler(logoutRequestResolver);
|
|
return new Saml2RelyingPartyInitiatedLogoutSuccessHandler(logoutRequestResolver);
|
|
}
|
|
}
|
|
|
|
|
|
private Saml2LogoutResponseResolver createSaml2LogoutResponseResolver(
|
|
private Saml2LogoutResponseResolver createSaml2LogoutResponseResolver(
|
|
- RelyingPartyRegistrationResolver relyingPartyRegistrationResolver) {
|
|
|
|
- return this.logoutResponseConfigurer.logoutResponseResolver(relyingPartyRegistrationResolver);
|
|
|
|
|
|
+ RelyingPartyRegistrationRepository registrations) {
|
|
|
|
+ return this.logoutResponseConfigurer.logoutResponseResolver(registrations);
|
|
}
|
|
}
|
|
|
|
|
|
private <C> C getBeanOrNull(Class<C> clazz) {
|
|
private <C> C getBeanOrNull(Class<C> clazz) {
|
|
@@ -385,12 +382,11 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
return this.logoutRequestValidator;
|
|
return this.logoutRequestValidator;
|
|
}
|
|
}
|
|
|
|
|
|
- private Saml2LogoutRequestResolver logoutRequestResolver(
|
|
|
|
- RelyingPartyRegistrationResolver relyingPartyRegistrationResolver) {
|
|
|
|
|
|
+ private Saml2LogoutRequestResolver logoutRequestResolver(RelyingPartyRegistrationRepository registrations) {
|
|
if (this.logoutRequestResolver != null) {
|
|
if (this.logoutRequestResolver != null) {
|
|
return this.logoutRequestResolver;
|
|
return this.logoutRequestResolver;
|
|
}
|
|
}
|
|
- return new OpenSaml4LogoutRequestResolver(relyingPartyRegistrationResolver);
|
|
|
|
|
|
+ return new OpenSaml4LogoutRequestResolver(registrations);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
@@ -454,10 +450,9 @@ public final class Saml2LogoutConfigurer<H extends HttpSecurityBuilder<H>>
|
|
return this.logoutResponseValidator;
|
|
return this.logoutResponseValidator;
|
|
}
|
|
}
|
|
|
|
|
|
- private Saml2LogoutResponseResolver logoutResponseResolver(
|
|
|
|
- RelyingPartyRegistrationResolver relyingPartyRegistrationResolver) {
|
|
|
|
|
|
+ private Saml2LogoutResponseResolver logoutResponseResolver(RelyingPartyRegistrationRepository registrations) {
|
|
if (this.logoutResponseResolver == null) {
|
|
if (this.logoutResponseResolver == null) {
|
|
- return new OpenSaml4LogoutResponseResolver(relyingPartyRegistrationResolver);
|
|
|
|
|
|
+ return new OpenSaml4LogoutResponseResolver(registrations);
|
|
}
|
|
}
|
|
return this.logoutResponseResolver;
|
|
return this.logoutResponseResolver;
|
|
}
|
|
}
|