Skip to content

Commit 7da3521

Browse files
committed
Use PathPatternRequestMatcher in saml2
Issue gh-16887
1 parent 558b7e0 commit 7da3521

File tree

16 files changed

+57
-56
lines changed

16 files changed

+57
-56
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LoginConfigurer.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.springframework.security.authentication.AuthenticationProvider;
3030
import org.springframework.security.config.Customizer;
3131
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
32-
import org.springframework.security.config.annotation.web.RequestMatcherFactory;
3332
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
3433
import org.springframework.security.config.annotation.web.configurers.AbstractAuthenticationFilterConfigurer;
3534
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
@@ -237,7 +236,7 @@ public Saml2LoginConfigurer<B> authenticationRequestUriQuery(String authenticati
237236
this.authenticationRequestParams = new String[parts.length - 1];
238237
System.arraycopy(parts, 1, this.authenticationRequestParams, 0, parts.length - 1);
239238
this.authenticationRequestMatcher = new PathQueryRequestMatcher(
240-
RequestMatcherFactory.matcher(this.authenticationRequestUri), this.authenticationRequestParams);
239+
getRequestMatcherBuilder().matcher(this.authenticationRequestUri), this.authenticationRequestParams);
241240
return this;
242241
}
243242

@@ -254,13 +253,13 @@ public Saml2LoginConfigurer<B> authenticationRequestUriQuery(String authenticati
254253
@Override
255254
public Saml2LoginConfigurer<B> loginProcessingUrl(String loginProcessingUrl) {
256255
Assert.hasText(loginProcessingUrl, "loginProcessingUrl cannot be empty");
257-
this.loginProcessingUrl = RequestMatcherFactory.matcher(loginProcessingUrl);
256+
this.loginProcessingUrl = getRequestMatcherBuilder().matcher(loginProcessingUrl);
258257
return this;
259258
}
260259

261260
@Override
262261
protected RequestMatcher createLoginProcessingUrlMatcher(String loginProcessingUrl) {
263-
return RequestMatcherFactory.matcher(loginProcessingUrl);
262+
return getRequestMatcherBuilder().matcher(loginProcessingUrl);
264263
}
265264

266265
/**
@@ -338,8 +337,8 @@ RelyingPartyRegistrationRepository relyingPartyRegistrationRepository(B http) {
338337
}
339338

340339
private AuthenticationEntryPoint getLoginEntryPoint(B http, String providerLoginPage) {
341-
RequestMatcher loginPageMatcher = RequestMatcherFactory.matcher(this.getLoginPage());
342-
RequestMatcher faviconMatcher = RequestMatcherFactory.matcher("/favicon.ico");
340+
RequestMatcher loginPageMatcher = getRequestMatcherBuilder().matcher(this.getLoginPage());
341+
RequestMatcher faviconMatcher = getRequestMatcherBuilder().matcher("/favicon.ico");
343342
RequestMatcher defaultEntryPointMatcher = this.getAuthenticationEntryPointMatcher(http);
344343
RequestMatcher defaultLoginPageMatcher = new AndRequestMatcher(
345344
new OrRequestMatcher(loginPageMatcher, faviconMatcher), defaultEntryPointMatcher);
@@ -393,9 +392,9 @@ private Saml2AuthenticationRequestResolver getAuthenticationRequestResolver(B ht
393392
private RequestMatcher getAuthenticationRequestMatcher() {
394393
if (this.authenticationRequestMatcher == null) {
395394
this.authenticationRequestMatcher = RequestMatchers.anyOf(
396-
RequestMatcherFactory
395+
getRequestMatcherBuilder()
397396
.matcher(Saml2AuthenticationRequestResolver.DEFAULT_AUTHENTICATION_REQUEST_URI),
398-
new PathQueryRequestMatcher(RequestMatcherFactory.matcher(this.authenticationRequestUri),
397+
new PathQueryRequestMatcher(getRequestMatcherBuilder().matcher(this.authenticationRequestUri),
399398
this.authenticationRequestParams));
400399
}
401400
return this.authenticationRequestMatcher;
@@ -404,8 +403,8 @@ private RequestMatcher getAuthenticationRequestMatcher() {
404403
private RequestMatcher getLoginProcessingEndpoint() {
405404
if (this.loginProcessingUrl == null) {
406405
this.loginProcessingUrl = RequestMatchers.anyOf(
407-
RequestMatcherFactory.matcher(Saml2WebSsoAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI),
408-
RequestMatcherFactory.matcher("/login/saml2/sso"));
406+
getRequestMatcherBuilder().matcher(Saml2WebSsoAuthenticationFilter.DEFAULT_FILTER_PROCESSES_URI),
407+
getRequestMatcherBuilder().matcher("/login/saml2/sso"));
409408
}
410409

411410
return this.loginProcessingUrl;

config/src/main/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.security.authentication.AuthenticationManager;
2828
import org.springframework.security.config.Customizer;
2929
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
30-
import org.springframework.security.config.annotation.web.RequestMatcherFactory;
3130
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
3231
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
3332
import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer;
@@ -279,19 +278,19 @@ private Saml2RelyingPartyInitiatedLogoutFilter createRelyingPartyLogoutFilter(
279278
}
280279

281280
private RequestMatcher createLogoutMatcher() {
282-
RequestMatcher logout = RequestMatcherFactory.matcher(HttpMethod.POST, this.logoutUrl);
281+
RequestMatcher logout = getRequestMatcherBuilder().matcher(HttpMethod.POST, this.logoutUrl);
283282
RequestMatcher saml2 = new Saml2RequestMatcher(getSecurityContextHolderStrategy());
284283
return new AndRequestMatcher(logout, saml2);
285284
}
286285

287286
private RequestMatcher createLogoutRequestMatcher() {
288-
RequestMatcher logout = RequestMatcherFactory.matcher(this.logoutRequestConfigurer.logoutUrl);
287+
RequestMatcher logout = getRequestMatcherBuilder().matcher(this.logoutRequestConfigurer.logoutUrl);
289288
RequestMatcher samlRequest = new ParameterRequestMatcher("SAMLRequest");
290289
return new AndRequestMatcher(logout, samlRequest);
291290
}
292291

293292
private RequestMatcher createLogoutResponseMatcher() {
294-
RequestMatcher logout = RequestMatcherFactory.matcher(this.logoutResponseConfigurer.logoutUrl);
293+
RequestMatcher logout = getRequestMatcherBuilder().matcher(this.logoutResponseConfigurer.logoutUrl);
295294
RequestMatcher samlResponse = new ParameterRequestMatcher("SAMLResponse");
296295
return new AndRequestMatcher(logout, samlResponse);
297296
}

config/src/main/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2MetadataConfigurer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.springframework.context.ApplicationContext;
2424
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
25-
import org.springframework.security.config.annotation.web.RequestMatcherFactory;
2625
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2726
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
2827
import org.springframework.security.saml2.provider.service.metadata.OpenSaml4MetadataResolver;
@@ -111,12 +110,12 @@ public Saml2MetadataConfigurer<H> metadataUrl(String metadataUrl) {
111110
if (USE_OPENSAML_5) {
112111
RequestMatcherMetadataResponseResolver metadata = new RequestMatcherMetadataResponseResolver(
113112
registrations, new OpenSaml5MetadataResolver());
114-
metadata.setRequestMatcher(RequestMatcherFactory.matcher(metadataUrl));
113+
metadata.setRequestMatcher(getRequestMatcherBuilder().matcher(metadataUrl));
115114
return metadata;
116115
}
117116
RequestMatcherMetadataResponseResolver metadata = new RequestMatcherMetadataResponseResolver(registrations,
118117
new OpenSaml4MetadataResolver());
119-
metadata.setRequestMatcher(RequestMatcherFactory.matcher(metadataUrl));
118+
metadata.setRequestMatcher(getRequestMatcherBuilder().matcher(metadataUrl));
120119
return metadata;
121120
};
122121
return this;

config/src/test/java/org/springframework/security/config/annotation/web/configurers/saml2/Saml2LogoutConfigurerTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.context.annotation.Bean;
3939
import org.springframework.context.annotation.Configuration;
4040
import org.springframework.context.annotation.Import;
41+
import org.springframework.http.HttpMethod;
4142
import org.springframework.mock.web.MockHttpServletRequest;
4243
import org.springframework.mock.web.MockHttpServletResponse;
4344
import org.springframework.mock.web.MockHttpSession;
@@ -77,7 +78,6 @@
7778
import org.springframework.security.web.authentication.logout.LogoutHandler;
7879
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
7980
import org.springframework.security.web.servlet.TestMockHttpServletRequests;
80-
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
8181
import org.springframework.test.web.servlet.MockMvc;
8282
import org.springframework.test.web.servlet.MvcResult;
8383
import org.springframework.test.web.servlet.request.RequestPostProcessor;
@@ -97,6 +97,7 @@
9797
import static org.springframework.security.config.Customizer.withDefaults;
9898
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
9999
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
100+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
100101
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
101102
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
102103
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
@@ -620,7 +621,7 @@ SecurityFilterChain web(HttpSecurity http) throws Exception {
620621
.saml2Logout((saml2) -> saml2.addObjectPostProcessor(new ObjectPostProcessor<LogoutFilter>() {
621622
@Override
622623
public <O extends LogoutFilter> O postProcess(O filter) {
623-
filter.setLogoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"));
624+
filter.setLogoutRequestMatcher(pathPattern(HttpMethod.GET, "/logout"));
624625
return filter;
625626
}
626627
}));

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/BaseOpenSamlAuthenticationTokenConverter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@
3030
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
3131
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationPlaceholderResolvers.UriResolver;
3232
import org.springframework.security.web.authentication.AuthenticationConverter;
33-
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
3433
import org.springframework.security.web.util.matcher.OrRequestMatcher;
3534
import org.springframework.security.web.util.matcher.RequestMatcher;
3635
import org.springframework.util.Assert;
3736

37+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
38+
3839
final class BaseOpenSamlAuthenticationTokenConverter implements AuthenticationConverter {
3940

4041
static {
@@ -45,9 +46,8 @@ final class BaseOpenSamlAuthenticationTokenConverter implements AuthenticationCo
4546

4647
private final RelyingPartyRegistrationRepository registrations;
4748

48-
private RequestMatcher requestMatcher = new OrRequestMatcher(
49-
PathPatternRequestMatcher.withDefaults().matcher("/login/saml2/sso/{registrationId}"),
50-
PathPatternRequestMatcher.withDefaults().matcher("/login/saml2/sso"));
49+
private RequestMatcher requestMatcher = new OrRequestMatcher(pathPattern("/login/saml2/sso/{registrationId}"),
50+
pathPattern("/login/saml2/sso"));
5151

5252
private Saml2AuthenticationRequestRepository<?> authenticationRequests = new HttpSessionSaml2AuthenticationRequestRepository();
5353

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/authentication/BaseOpenSamlAuthenticationRequestResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import org.springframework.security.web.util.matcher.RequestMatchers;
5858
import org.springframework.util.Assert;
5959

60+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
61+
6062
/**
6163
* For internal use only. Intended for consolidating common behavior related to minting a
6264
* SAML 2.0 Authn Request.
@@ -222,7 +224,7 @@ private static final class PathPatternQueryRequestMatcher implements RequestMatc
222224

223225
PathPatternQueryRequestMatcher(String path, String... params) {
224226
List<RequestMatcher> matchers = new ArrayList<>();
225-
matchers.add(PathPatternRequestMatcher.withDefaults().matcher(path));
227+
matchers.add(pathPattern(path));
226228
for (String param : params) {
227229
String[] parts = param.split("=");
228230
if (parts.length == 1) {

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/authentication/Saml2WebSsoAuthenticationFilter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@
3434
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
3535
import org.springframework.security.web.authentication.AuthenticationConverter;
3636
import org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy;
37-
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
3837
import org.springframework.security.web.util.matcher.OrRequestMatcher;
3938
import org.springframework.security.web.util.matcher.RequestMatcher;
4039
import org.springframework.util.Assert;
4140

41+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
42+
4243
/**
4344
* @since 5.2
4445
*/
@@ -47,8 +48,7 @@ public class Saml2WebSsoAuthenticationFilter extends AbstractAuthenticationProce
4748
public static final String DEFAULT_FILTER_PROCESSES_URI = "/login/saml2/sso/{registrationId}";
4849

4950
private static final RequestMatcher DEFAULT_REQUEST_MATCHER = new OrRequestMatcher(
50-
PathPatternRequestMatcher.withDefaults().matcher(DEFAULT_FILTER_PROCESSES_URI),
51-
PathPatternRequestMatcher.withDefaults().matcher("/login/saml2/sso"));
51+
pathPattern(DEFAULT_FILTER_PROCESSES_URI), pathPattern("/login/saml2/sso"));
5252

5353
private final AuthenticationConverter authenticationConverter;
5454

@@ -64,7 +64,7 @@ public class Saml2WebSsoAuthenticationFilter extends AbstractAuthenticationProce
6464
*/
6565
public Saml2WebSsoAuthenticationFilter(RelyingPartyRegistrationRepository relyingPartyRegistrationRepository) {
6666
this(relyingPartyRegistrationRepository, DEFAULT_FILTER_PROCESSES_URI);
67-
RequestMatcher processUri = PathPatternRequestMatcher.withDefaults().matcher(DEFAULT_FILTER_PROCESSES_URI);
67+
RequestMatcher processUri = pathPattern(DEFAULT_FILTER_PROCESSES_URI);
6868
setRequiresAuthenticationRequestMatcher(processUri);
6969
}
7070

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/authentication/logout/BaseOpenSamlLogoutRequestValidatorParametersResolver.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@
3333
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
3434
import org.springframework.security.saml2.provider.service.registration.Saml2MessageBinding;
3535
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationPlaceholderResolvers;
36-
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
3736
import org.springframework.security.web.util.matcher.OrRequestMatcher;
3837
import org.springframework.security.web.util.matcher.RequestMatcher;
3938
import org.springframework.util.Assert;
4039

40+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
41+
4142
/**
4243
* An OpenSAML-based implementation of
4344
* {@link Saml2LogoutRequestValidatorParametersResolver}
@@ -53,9 +54,8 @@ final class BaseOpenSamlLogoutRequestValidatorParametersResolver
5354

5455
private final RelyingPartyRegistrationRepository registrations;
5556

56-
private RequestMatcher requestMatcher = new OrRequestMatcher(
57-
PathPatternRequestMatcher.withDefaults().matcher("/logout/saml2/slo/{registrationId}"),
58-
PathPatternRequestMatcher.withDefaults().matcher("/logout/saml2/slo"));
57+
private RequestMatcher requestMatcher = new OrRequestMatcher(pathPattern("/logout/saml2/slo/{registrationId}"),
58+
pathPattern("/logout/saml2/slo"));
5959

6060
/**
6161
* Constructs a {@link BaseOpenSamlLogoutRequestValidatorParametersResolver}

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/authentication/logout/Saml2LogoutResponseFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@
4141
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationPlaceholderResolvers.UriResolver;
4242
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationResolver;
4343
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
44-
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
4544
import org.springframework.security.web.util.matcher.RequestMatcher;
4645
import org.springframework.util.Assert;
4746
import org.springframework.web.filter.OncePerRequestFilter;
4847

48+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
49+
4950
/**
5051
* A filter for handling a &lt;saml2:LogoutResponse&gt; sent from the asserting party. A
5152
* &lt;saml2:LogoutResponse&gt; is sent in response to a &lt;saml2:LogoutRequest&gt;
@@ -72,7 +73,7 @@ public final class Saml2LogoutResponseFilter extends OncePerRequestFilter {
7273

7374
private Saml2LogoutRequestRepository logoutRequestRepository = new HttpSessionLogoutRequestRepository();
7475

75-
private RequestMatcher logoutRequestMatcher = PathPatternRequestMatcher.withDefaults().matcher("/logout/saml2/slo");
76+
private RequestMatcher logoutRequestMatcher = pathPattern("/logout/saml2/slo");
7677

7778
public Saml2LogoutResponseFilter(RelyingPartyRegistrationRepository registrations,
7879
Saml2LogoutResponseValidator logoutResponseValidator, LogoutSuccessHandler logoutSuccessHandler) {

saml2/saml2-service-provider/src/main/java/org/springframework/security/saml2/provider/service/web/metadata/RequestMatcherMetadataResponseResolver.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@
3434
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistration;
3535
import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository;
3636
import org.springframework.security.saml2.provider.service.web.RelyingPartyRegistrationPlaceholderResolvers;
37-
import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher;
3837
import org.springframework.security.web.util.matcher.OrRequestMatcher;
3938
import org.springframework.security.web.util.matcher.RequestMatcher;
4039
import org.springframework.util.Assert;
4140

41+
import static org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher.pathPattern;
42+
4243
/**
4344
* An implementation of {@link Saml2MetadataResponseResolver} that identifies which
4445
* {@link RelyingPartyRegistration}s to use with a {@link RequestMatcher}
@@ -51,9 +52,8 @@ public class RequestMatcherMetadataResponseResolver implements Saml2MetadataResp
5152
private static final String DEFAULT_METADATA_FILENAME = "saml-{registrationId}-metadata.xml";
5253

5354
private RequestMatcher matcher = new OrRequestMatcher(
54-
PathPatternRequestMatcher.withDefaults().matcher("/saml2/service-provider-metadata/{registrationId}"),
55-
PathPatternRequestMatcher.withDefaults().matcher("/saml2/metadata/{registrationId}"),
56-
PathPatternRequestMatcher.withDefaults().matcher("/saml2/metadata"));
55+
pathPattern("/saml2/service-provider-metadata/{registrationId}"),
56+
pathPattern("/saml2/metadata/{registrationId}"), pathPattern("/saml2/metadata"));
5757

5858
private String filename = DEFAULT_METADATA_FILENAME;
5959

0 commit comments

Comments
 (0)