mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-29 15:22:15 +00:00
AuthorizationCodeAuthenticationProcessingFilter -> AuthorizationCodeAuthenticationFilter
This commit is contained in:
parent
5c14e48b18
commit
eb320bfed4
@ -89,7 +89,7 @@ final class FilterComparator implements Comparator<Filter>, Serializable {
|
|||||||
order);
|
order);
|
||||||
order += STEP;
|
order += STEP;
|
||||||
filterToOrder.put(
|
filterToOrder.put(
|
||||||
"org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationProcessingFilter",
|
"org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationFilter",
|
||||||
order);
|
order);
|
||||||
order += STEP;
|
order += STEP;
|
||||||
put(UsernamePasswordAuthenticationFilter.class, order);
|
put(UsernamePasswordAuthenticationFilter.class, order);
|
||||||
|
@ -33,7 +33,7 @@ import org.springframework.security.oauth2.client.user.CustomUserTypesOAuth2User
|
|||||||
import org.springframework.security.oauth2.client.user.DefaultOAuth2UserService;
|
import org.springframework.security.oauth2.client.user.DefaultOAuth2UserService;
|
||||||
import org.springframework.security.oauth2.client.user.DelegatingOAuth2UserService;
|
import org.springframework.security.oauth2.client.user.DelegatingOAuth2UserService;
|
||||||
import org.springframework.security.oauth2.client.user.OAuth2UserService;
|
import org.springframework.security.oauth2.client.user.OAuth2UserService;
|
||||||
import org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationProcessingFilter;
|
import org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationFilter;
|
||||||
import org.springframework.security.oauth2.client.web.AuthorizationGrantTokenExchanger;
|
import org.springframework.security.oauth2.client.web.AuthorizationGrantTokenExchanger;
|
||||||
import org.springframework.security.oauth2.client.web.nimbus.NimbusAuthorizationCodeTokenExchanger;
|
import org.springframework.security.oauth2.client.web.nimbus.NimbusAuthorizationCodeTokenExchanger;
|
||||||
import org.springframework.security.oauth2.core.AccessToken;
|
import org.springframework.security.oauth2.core.AccessToken;
|
||||||
@ -53,7 +53,7 @@ import java.util.Map;
|
|||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
*/
|
*/
|
||||||
final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecurityBuilder<H>, R extends RequestMatcher> extends
|
final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecurityBuilder<H>, R extends RequestMatcher> extends
|
||||||
AbstractAuthenticationFilterConfigurer<H, AuthorizationCodeAuthenticationFilterConfigurer<H, R>, AuthorizationCodeAuthenticationProcessingFilter> {
|
AbstractAuthenticationFilterConfigurer<H, AuthorizationCodeAuthenticationFilterConfigurer<H, R>, AuthorizationCodeAuthenticationFilter> {
|
||||||
|
|
||||||
private R authorizationResponseMatcher;
|
private R authorizationResponseMatcher;
|
||||||
private AuthorizationGrantAuthenticator<AuthorizationCodeAuthenticationToken> authorizationCodeAuthenticator;
|
private AuthorizationGrantAuthenticator<AuthorizationCodeAuthenticationToken> authorizationCodeAuthenticator;
|
||||||
@ -65,7 +65,7 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
|
|||||||
private GrantedAuthoritiesMapper userAuthoritiesMapper;
|
private GrantedAuthoritiesMapper userAuthoritiesMapper;
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationFilterConfigurer() {
|
AuthorizationCodeAuthenticationFilterConfigurer() {
|
||||||
super(new AuthorizationCodeAuthenticationProcessingFilter(), null);
|
super(new AuthorizationCodeAuthenticationFilter(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationFilterConfigurer<H, R> authorizationResponseMatcher(R authorizationResponseMatcher) {
|
AuthorizationCodeAuthenticationFilterConfigurer<H, R> authorizationResponseMatcher(R authorizationResponseMatcher) {
|
||||||
@ -148,7 +148,7 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configure(H http) throws Exception {
|
public void configure(H http) throws Exception {
|
||||||
AuthorizationCodeAuthenticationProcessingFilter authFilter = this.getAuthenticationFilter();
|
AuthorizationCodeAuthenticationFilter authFilter = this.getAuthenticationFilter();
|
||||||
if (this.authorizationResponseMatcher != null) {
|
if (this.authorizationResponseMatcher != null) {
|
||||||
authFilter.setAuthorizationResponseMatcher(this.authorizationResponseMatcher);
|
authFilter.setAuthorizationResponseMatcher(this.authorizationResponseMatcher);
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ import java.io.IOException;
|
|||||||
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1">Section 4.1 Authorization Code Grant Flow</a>
|
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1">Section 4.1 Authorization Code Grant Flow</a>
|
||||||
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1.2">Section 4.1.2 Authorization Response</a>
|
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1.2">Section 4.1.2 Authorization Response</a>
|
||||||
*/
|
*/
|
||||||
public class AuthorizationCodeAuthenticationProcessingFilter extends AbstractAuthenticationProcessingFilter {
|
public class AuthorizationCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
|
||||||
public static final String DEFAULT_AUTHORIZATION_RESPONSE_BASE_URI = "/oauth2/authorize/code";
|
public static final String DEFAULT_AUTHORIZATION_RESPONSE_BASE_URI = "/oauth2/authorize/code";
|
||||||
private static final String AUTHORIZATION_REQUEST_NOT_FOUND_ERROR_CODE = "authorization_request_not_found";
|
private static final String AUTHORIZATION_REQUEST_NOT_FOUND_ERROR_CODE = "authorization_request_not_found";
|
||||||
private static final String INVALID_STATE_PARAMETER_ERROR_CODE = "invalid_state_parameter";
|
private static final String INVALID_STATE_PARAMETER_ERROR_CODE = "invalid_state_parameter";
|
||||||
@ -94,7 +94,7 @@ public class AuthorizationCodeAuthenticationProcessingFilter extends AbstractAut
|
|||||||
private AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
private AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
||||||
private final ClientRegistrationIdentifierStrategy<String> providerIdentifierStrategy = new ProviderIdentifierStrategy();
|
private final ClientRegistrationIdentifierStrategy<String> providerIdentifierStrategy = new ProviderIdentifierStrategy();
|
||||||
|
|
||||||
public AuthorizationCodeAuthenticationProcessingFilter() {
|
public AuthorizationCodeAuthenticationFilter() {
|
||||||
super(new AuthorizationResponseMatcher());
|
super(new AuthorizationResponseMatcher());
|
||||||
}
|
}
|
||||||
|
|
@ -47,7 +47,7 @@ import java.util.Map;
|
|||||||
* It uses an {@link AuthorizationRequestUriBuilder} to build the <i>OAuth 2.0 Authorization Request</i>,
|
* It uses an {@link AuthorizationRequestUriBuilder} to build the <i>OAuth 2.0 Authorization Request</i>,
|
||||||
* which is used as the redirect <code>URI</code> to the <i>Authorization Endpoint</i>.
|
* which is used as the redirect <code>URI</code> to the <i>Authorization Endpoint</i>.
|
||||||
* The redirect <code>URI</code> will include the client identifier, requested scope(s), state, response type, and a redirection URI
|
* The redirect <code>URI</code> will include the client identifier, requested scope(s), state, response type, and a redirection URI
|
||||||
* which the authorization server will send the user-agent back to (handled by {@link AuthorizationCodeAuthenticationProcessingFilter})
|
* which the authorization server will send the user-agent back to (handled by {@link AuthorizationCodeAuthenticationFilter})
|
||||||
* once access is granted (or denied) by the end-user (resource owner).
|
* once access is granted (or denied) by the end-user (resource owner).
|
||||||
*
|
*
|
||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
@ -57,7 +57,7 @@ import java.util.Map;
|
|||||||
* @see AuthorizationRequestUriBuilder
|
* @see AuthorizationRequestUriBuilder
|
||||||
* @see ClientRegistration
|
* @see ClientRegistration
|
||||||
* @see ClientRegistrationRepository
|
* @see ClientRegistrationRepository
|
||||||
* @see AuthorizationCodeAuthenticationProcessingFilter
|
* @see AuthorizationCodeAuthenticationFilter
|
||||||
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1">Section 4.1 Authorization Code Grant Flow</a>
|
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1">Section 4.1 Authorization Code Grant Flow</a>
|
||||||
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1.1">Section 4.1.1 Authorization Request</a>
|
* @see <a target="_blank" href="https://tools.ietf.org/html/rfc6749#section-4.1.1">Section 4.1.1 Authorization Request</a>
|
||||||
*/
|
*/
|
||||||
|
@ -27,7 +27,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
* <p>
|
* <p>
|
||||||
* Used by the {@link AuthorizationCodeRequestRedirectFilter} for persisting the <i>Authorization Request</i>
|
* Used by the {@link AuthorizationCodeRequestRedirectFilter} for persisting the <i>Authorization Request</i>
|
||||||
* before it initiates the authorization code grant flow.
|
* before it initiates the authorization code grant flow.
|
||||||
* As well, used by the {@link AuthorizationCodeAuthenticationProcessingFilter} when resolving
|
* As well, used by the {@link AuthorizationCodeAuthenticationFilter} when resolving
|
||||||
* the associated <i>Authorization Request</i> during the handling of the <i>Authorization Response</i>.
|
* the associated <i>Authorization Request</i> during the handling of the <i>Authorization Response</i>.
|
||||||
*
|
*
|
||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
|
@ -49,17 +49,17 @@ import java.util.Map;
|
|||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link AuthorizationCodeAuthenticationProcessingFilter}.
|
* Tests {@link AuthorizationCodeAuthenticationFilter}.
|
||||||
*
|
*
|
||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
*/
|
*/
|
||||||
public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
public class AuthorizationCodeAuthenticationFilterTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void doFilterWhenNotAuthorizationCodeResponseThenContinueChain() throws Exception {
|
public void doFilterWhenNotAuthorizationCodeResponseThenContinueChain() throws Exception {
|
||||||
ClientRegistration clientRegistration = TestUtil.googleClientRegistration();
|
ClientRegistration clientRegistration = TestUtil.googleClientRegistration();
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
||||||
|
|
||||||
String requestURI = "/path";
|
String requestURI = "/path";
|
||||||
MockHttpServletRequest request = new MockHttpServletRequest("GET", requestURI);
|
MockHttpServletRequest request = new MockHttpServletRequest("GET", requestURI);
|
||||||
@ -77,7 +77,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
public void doFilterWhenAuthorizationCodeErrorResponseThenAuthenticationFailureHandlerIsCalled() throws Exception {
|
public void doFilterWhenAuthorizationCodeErrorResponseThenAuthenticationFailureHandlerIsCalled() throws Exception {
|
||||||
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
||||||
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
||||||
filter.setAuthenticationFailureHandler(failureHandler);
|
filter.setAuthenticationFailureHandler(failureHandler);
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
AuthenticationManager authenticationManager = mock(AuthenticationManager.class);
|
AuthenticationManager authenticationManager = mock(AuthenticationManager.class);
|
||||||
Mockito.when(authenticationManager.authenticate(Matchers.any(Authentication.class))).thenReturn(clientAuthentication);
|
Mockito.when(authenticationManager.authenticate(Matchers.any(Authentication.class))).thenReturn(clientAuthentication);
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(authenticationManager, clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(authenticationManager, clientRegistration));
|
||||||
AuthenticationSuccessHandler successHandler = mock(AuthenticationSuccessHandler.class);
|
AuthenticationSuccessHandler successHandler = mock(AuthenticationSuccessHandler.class);
|
||||||
filter.setAuthenticationSuccessHandler(successHandler);
|
filter.setAuthenticationSuccessHandler(successHandler);
|
||||||
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
||||||
@ -135,7 +135,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
public void doFilterWhenAuthorizationCodeSuccessResponseAndNoMatchingAuthorizationRequestThenThrowOAuth2AuthenticationExceptionAuthorizationRequestNotFound() throws Exception {
|
public void doFilterWhenAuthorizationCodeSuccessResponseAndNoMatchingAuthorizationRequestThenThrowOAuth2AuthenticationExceptionAuthorizationRequestNotFound() throws Exception {
|
||||||
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
||||||
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
||||||
filter.setAuthenticationFailureHandler(failureHandler);
|
filter.setAuthenticationFailureHandler(failureHandler);
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
public void doFilterWhenAuthorizationCodeSuccessResponseWithInvalidStateParamThenThrowOAuth2AuthenticationExceptionInvalidStateParameter() throws Exception {
|
public void doFilterWhenAuthorizationCodeSuccessResponseWithInvalidStateParamThenThrowOAuth2AuthenticationExceptionInvalidStateParameter() throws Exception {
|
||||||
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
||||||
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
||||||
filter.setAuthenticationFailureHandler(failureHandler);
|
filter.setAuthenticationFailureHandler(failureHandler);
|
||||||
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
||||||
@ -180,7 +180,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
public void doFilterWhenAuthorizationCodeSuccessResponseWithInvalidRedirectUriParamThenThrowOAuth2AuthenticationExceptionInvalidRedirectUriParameter() throws Exception {
|
public void doFilterWhenAuthorizationCodeSuccessResponseWithInvalidRedirectUriParamThenThrowOAuth2AuthenticationExceptionInvalidRedirectUriParameter() throws Exception {
|
||||||
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
ClientRegistration clientRegistration = TestUtil.githubClientRegistration();
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
AuthorizationCodeAuthenticationFilter filter = Mockito.spy(setupFilter(clientRegistration));
|
||||||
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
AuthenticationFailureHandler failureHandler = mock(AuthenticationFailureHandler.class);
|
||||||
filter.setAuthenticationFailureHandler(failureHandler);
|
filter.setAuthenticationFailureHandler(failureHandler);
|
||||||
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
AuthorizationRequestRepository authorizationRequestRepository = new HttpSessionAuthorizationRequestRepository();
|
||||||
@ -201,7 +201,7 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
verifyThrowsOAuth2AuthenticationExceptionWithErrorCode(filter, failureHandler, "invalid_redirect_uri_parameter");
|
verifyThrowsOAuth2AuthenticationExceptionWithErrorCode(filter, failureHandler, "invalid_redirect_uri_parameter");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyThrowsOAuth2AuthenticationExceptionWithErrorCode(AuthorizationCodeAuthenticationProcessingFilter filter,
|
private void verifyThrowsOAuth2AuthenticationExceptionWithErrorCode(AuthorizationCodeAuthenticationFilter filter,
|
||||||
AuthenticationFailureHandler failureHandler,
|
AuthenticationFailureHandler failureHandler,
|
||||||
String errorCode) throws Exception {
|
String errorCode) throws Exception {
|
||||||
|
|
||||||
@ -218,18 +218,18 @@ public class AuthorizationCodeAuthenticationProcessingFilterTests {
|
|||||||
Assertions.assertThat(oauth2AuthenticationException.getErrorObject().getErrorCode()).isEqualTo(errorCode);
|
Assertions.assertThat(oauth2AuthenticationException.getErrorObject().getErrorCode()).isEqualTo(errorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private AuthorizationCodeAuthenticationProcessingFilter setupFilter(ClientRegistration... clientRegistrations) throws Exception {
|
private AuthorizationCodeAuthenticationFilter setupFilter(ClientRegistration... clientRegistrations) throws Exception {
|
||||||
AuthenticationManager authenticationManager = mock(AuthenticationManager.class);
|
AuthenticationManager authenticationManager = mock(AuthenticationManager.class);
|
||||||
|
|
||||||
return setupFilter(authenticationManager, clientRegistrations);
|
return setupFilter(authenticationManager, clientRegistrations);
|
||||||
}
|
}
|
||||||
|
|
||||||
private AuthorizationCodeAuthenticationProcessingFilter setupFilter(
|
private AuthorizationCodeAuthenticationFilter setupFilter(
|
||||||
AuthenticationManager authenticationManager, ClientRegistration... clientRegistrations) throws Exception {
|
AuthenticationManager authenticationManager, ClientRegistration... clientRegistrations) throws Exception {
|
||||||
|
|
||||||
ClientRegistrationRepository clientRegistrationRepository = TestUtil.clientRegistrationRepository(clientRegistrations);
|
ClientRegistrationRepository clientRegistrationRepository = TestUtil.clientRegistrationRepository(clientRegistrations);
|
||||||
|
|
||||||
AuthorizationCodeAuthenticationProcessingFilter filter = new AuthorizationCodeAuthenticationProcessingFilter();
|
AuthorizationCodeAuthenticationFilter filter = new AuthorizationCodeAuthenticationFilter();
|
||||||
filter.setClientRegistrationRepository(clientRegistrationRepository);
|
filter.setClientRegistrationRepository(clientRegistrationRepository);
|
||||||
filter.setAuthenticationManager(authenticationManager);
|
filter.setAuthenticationManager(authenticationManager);
|
||||||
|
|
@ -40,7 +40,7 @@ import org.springframework.security.oauth2.client.authentication.AuthorizationCo
|
|||||||
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
import org.springframework.security.oauth2.client.registration.ClientRegistration;
|
||||||
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
|
||||||
import org.springframework.security.oauth2.client.user.OAuth2UserService;
|
import org.springframework.security.oauth2.client.user.OAuth2UserService;
|
||||||
import org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationProcessingFilter;
|
import org.springframework.security.oauth2.client.web.AuthorizationCodeAuthenticationFilter;
|
||||||
import org.springframework.security.oauth2.client.web.AuthorizationCodeRequestRedirectFilter;
|
import org.springframework.security.oauth2.client.web.AuthorizationCodeRequestRedirectFilter;
|
||||||
import org.springframework.security.oauth2.client.web.AuthorizationGrantTokenExchanger;
|
import org.springframework.security.oauth2.client.web.AuthorizationGrantTokenExchanger;
|
||||||
import org.springframework.security.oauth2.core.AccessToken;
|
import org.springframework.security.oauth2.core.AccessToken;
|
||||||
@ -73,7 +73,7 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration tests for the OAuth 2.0 client filters {@link AuthorizationCodeRequestRedirectFilter}
|
* Integration tests for the OAuth 2.0 client filters {@link AuthorizationCodeRequestRedirectFilter}
|
||||||
* and {@link AuthorizationCodeAuthenticationProcessingFilter}.
|
* and {@link AuthorizationCodeAuthenticationFilter}.
|
||||||
* These filters work together to realize the Authorization Code Grant flow.
|
* These filters work together to realize the Authorization Code Grant flow.
|
||||||
*
|
*
|
||||||
* @author Joe Grandja
|
* @author Joe Grandja
|
||||||
|
Loading…
x
Reference in New Issue
Block a user