|
46 | 46 | import org.springframework.security.core.GrantedAuthority;
|
47 | 47 | import org.springframework.security.core.authority.AuthorityUtils;
|
48 | 48 | import org.springframework.security.core.context.SecurityContextHolder;
|
| 49 | +import org.springframework.security.oauth2.client.OAuth2AuthorizationContext; |
49 | 50 | import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
|
50 | 51 | import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProvider;
|
51 | 52 | import org.springframework.security.oauth2.client.OAuth2AuthorizedClientProviderBuilder;
|
|
68 | 69 | import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
|
69 | 70 | import org.springframework.security.oauth2.core.endpoint.TestOAuth2AccessTokenResponses;
|
70 | 71 | import org.springframework.security.oauth2.core.user.OAuth2User;
|
| 72 | +import org.springframework.util.StringUtils; |
71 | 73 | import org.springframework.web.client.RestOperations;
|
72 | 74 | import org.springframework.web.context.request.RequestContextHolder;
|
73 | 75 | import org.springframework.web.context.request.ServletRequestAttributes;
|
@@ -120,6 +122,8 @@ public class ServletOAuth2AuthorizedClientExchangeFilterFunctionTests {
|
120 | 122 | @Captor
|
121 | 123 | private ArgumentCaptor<OAuth2AuthorizedClient> authorizedClientCaptor;
|
122 | 124 |
|
| 125 | + private DefaultOAuth2AuthorizedClientManager authorizedClientManager; |
| 126 | + |
123 | 127 | /**
|
124 | 128 | * Used for get the attributes from defaultRequest.
|
125 | 129 | */
|
@@ -148,9 +152,9 @@ public void setup() {
|
148 | 152 | .clientCredentials(configurer -> configurer.accessTokenResponseClient(this.clientCredentialsTokenResponseClient))
|
149 | 153 | .password(configurer -> configurer.accessTokenResponseClient(this.passwordTokenResponseClient))
|
150 | 154 | .build();
|
151 |
| - DefaultOAuth2AuthorizedClientManager authorizedClientManager = new DefaultOAuth2AuthorizedClientManager( |
| 155 | + this.authorizedClientManager = new DefaultOAuth2AuthorizedClientManager( |
152 | 156 | this.clientRegistrationRepository, this.authorizedClientRepository);
|
153 |
| - authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider); |
| 157 | + this.authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider); |
154 | 158 | this.function = new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
|
155 | 159 | }
|
156 | 160 |
|
@@ -459,6 +463,18 @@ public void filterWhenPasswordClientNotAuthorizedThenGetNewToken() {
|
459 | 463 | ClientRegistration registration = TestClientRegistrations.password().build();
|
460 | 464 | when(this.clientRegistrationRepository.findByRegistrationId(eq(registration.getRegistrationId()))).thenReturn(registration);
|
461 | 465 |
|
| 466 | + // Set custom contextAttributesMapper |
| 467 | + this.authorizedClientManager.setContextAttributesMapper(authorizeRequest -> { |
| 468 | + Map<String, Object> contextAttributes = new HashMap<>(); |
| 469 | + String username = authorizeRequest.getServletRequest().getParameter(OAuth2ParameterNames.USERNAME); |
| 470 | + String password = authorizeRequest.getServletRequest().getParameter(OAuth2ParameterNames.PASSWORD); |
| 471 | + if (StringUtils.hasText(username) && StringUtils.hasText(password)) { |
| 472 | + contextAttributes.put(OAuth2AuthorizationContext.USERNAME_ATTRIBUTE_NAME, username); |
| 473 | + contextAttributes.put(OAuth2AuthorizationContext.PASSWORD_ATTRIBUTE_NAME, password); |
| 474 | + } |
| 475 | + return contextAttributes; |
| 476 | + }); |
| 477 | + |
462 | 478 | MockHttpServletRequest servletRequest = new MockHttpServletRequest();
|
463 | 479 | servletRequest.setParameter(OAuth2ParameterNames.USERNAME, "username");
|
464 | 480 | servletRequest.setParameter(OAuth2ParameterNames.PASSWORD, "password");
|
|
0 commit comments