oauth2Login does not auto-redirect for XHR request
Fixes gh-6812
This commit is contained in:
parent
aef3f514fe
commit
5aa50500cf
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2018 the original author or authors.
|
* Copyright 2002-2019 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.
|
||||||
|
@ -66,6 +66,7 @@ import org.springframework.security.web.util.matcher.AndRequestMatcher;
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
||||||
import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
|
import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
|
||||||
import org.springframework.security.web.util.matcher.OrRequestMatcher;
|
import org.springframework.security.web.util.matcher.OrRequestMatcher;
|
||||||
|
import org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher;
|
||||||
import org.springframework.security.web.util.matcher.RequestMatcher;
|
import org.springframework.security.web.util.matcher.RequestMatcher;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
@ -623,8 +624,11 @@ public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> exten
|
||||||
RequestMatcher defaultLoginPageMatcher = new AndRequestMatcher(
|
RequestMatcher defaultLoginPageMatcher = new AndRequestMatcher(
|
||||||
new OrRequestMatcher(loginPageMatcher, faviconMatcher), defaultEntryPointMatcher);
|
new OrRequestMatcher(loginPageMatcher, faviconMatcher), defaultEntryPointMatcher);
|
||||||
|
|
||||||
|
RequestMatcher notXRequestedWith = new NegatedRequestMatcher(
|
||||||
|
new RequestHeaderRequestMatcher("X-Requested-With", "XMLHttpRequest"));
|
||||||
|
|
||||||
LinkedHashMap<RequestMatcher, AuthenticationEntryPoint> entryPoints = new LinkedHashMap<>();
|
LinkedHashMap<RequestMatcher, AuthenticationEntryPoint> entryPoints = new LinkedHashMap<>();
|
||||||
entryPoints.put(new NegatedRequestMatcher(defaultLoginPageMatcher),
|
entryPoints.put(new AndRequestMatcher(notXRequestedWith, new NegatedRequestMatcher(defaultLoginPageMatcher)),
|
||||||
new LoginUrlAuthenticationEntryPoint(providerLoginPage));
|
new LoginUrlAuthenticationEntryPoint(providerLoginPage));
|
||||||
|
|
||||||
DelegatingAuthenticationEntryPoint loginEntryPoint = new DelegatingAuthenticationEntryPoint(entryPoints);
|
DelegatingAuthenticationEntryPoint loginEntryPoint = new DelegatingAuthenticationEntryPoint(entryPoints);
|
||||||
|
|
|
@ -374,6 +374,21 @@ public class OAuth2LoginConfigurerTests {
|
||||||
assertThat(this.response.getRedirectedUrl()).matches("http://localhost/login");
|
assertThat(this.response.getRedirectedUrl()).matches("http://localhost/login");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gh-6812
|
||||||
|
@Test
|
||||||
|
public void oauth2LoginWithOneClientConfiguredAndRequestXHRNotAuthenticatedThenDoesNotRedirectForAuthorization() throws Exception {
|
||||||
|
loadConfig(OAuth2LoginConfig.class);
|
||||||
|
|
||||||
|
String requestUri = "/";
|
||||||
|
this.request = new MockHttpServletRequest("GET", requestUri);
|
||||||
|
this.request.setServletPath(requestUri);
|
||||||
|
this.request.addHeader("X-Requested-With", "XMLHttpRequest");
|
||||||
|
|
||||||
|
this.springSecurityFilterChain.doFilter(this.request, this.response, this.filterChain);
|
||||||
|
|
||||||
|
assertThat(this.response.getRedirectedUrl()).doesNotMatch("http://localhost/oauth2/authorization/google");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void oauth2LoginWithCustomLoginPageThenRedirectCustomLoginPage() throws Exception {
|
public void oauth2LoginWithCustomLoginPageThenRedirectCustomLoginPage() throws Exception {
|
||||||
loadConfig(OAuth2LoginConfigCustomLoginPage.class);
|
loadConfig(OAuth2LoginConfigCustomLoginPage.class);
|
||||||
|
|
Loading…
Reference in New Issue