|
22 | 22 | import jakarta.servlet.http.HttpServletRequest;
|
23 | 23 |
|
24 | 24 | import org.springframework.http.HttpMethod;
|
| 25 | +import org.springframework.http.converter.HttpMessageConverter; |
25 | 26 | import org.springframework.security.authentication.AuthenticationManager;
|
26 | 27 | import org.springframework.security.authentication.AuthenticationProvider;
|
27 | 28 | import org.springframework.security.config.annotation.ObjectPostProcessor;
|
@@ -65,6 +66,8 @@ public final class OAuth2TokenEndpointConfigurer extends AbstractOAuth2Configure
|
65 | 66 | private Consumer<List<AuthenticationConverter>> accessTokenRequestConvertersConsumer = (accessTokenRequestConverters) -> {};
|
66 | 67 | private final List<AuthenticationProvider> authenticationProviders = new ArrayList<>();
|
67 | 68 | private Consumer<List<AuthenticationProvider>> authenticationProvidersConsumer = (authenticationProviders) -> {};
|
| 69 | + private HttpMessageConverter<OAuth2AccessTokenResponse> accessTokenHttpResponseConverter; |
| 70 | + private HttpMessageConverter<OAuth2Error> errorHttpResponseConverter; |
68 | 71 | private AuthenticationSuccessHandler accessTokenResponseHandler;
|
69 | 72 | private AuthenticationFailureHandler errorResponseHandler;
|
70 | 73 |
|
@@ -132,6 +135,26 @@ public OAuth2TokenEndpointConfigurer authenticationProviders(
|
132 | 135 | return this;
|
133 | 136 | }
|
134 | 137 |
|
| 138 | + /** |
| 139 | + * Sets the {@link HttpMessageConverter} used for building a custom the response body from {@link OAuth2AccessTokenResponse}. |
| 140 | + * |
| 141 | + * @param accessTokenHttpResponseConverter the {@link HttpMessageConverter} used for building a custom the response body from {@link OAuth2AccessTokenResponse} |
| 142 | + */ |
| 143 | + public OAuth2TokenEndpointConfigurer accessTokenHttpResponseConverter(HttpMessageConverter<OAuth2AccessTokenResponse> accessTokenHttpResponseConverter) { |
| 144 | + this.accessTokenHttpResponseConverter = accessTokenHttpResponseConverter; |
| 145 | + return this; |
| 146 | + } |
| 147 | + |
| 148 | + /** |
| 149 | + * Sets the {@link HttpMessageConverter} used for building a custom the response body from {@link OAuth2Error}. |
| 150 | + * |
| 151 | + * @param errorHttpResponseConverter the {@link HttpMessageConverter} used for building a custom the response body from {@link OAuth2Error} |
| 152 | + */ |
| 153 | + public OAuth2TokenEndpointConfigurer errorHttpResponseConverter(HttpMessageConverter<OAuth2Error> errorHttpResponseConverter) { |
| 154 | + this.errorHttpResponseConverter = errorHttpResponseConverter; |
| 155 | + return this; |
| 156 | + } |
| 157 | + |
135 | 158 | /**
|
136 | 159 | * Sets the {@link AuthenticationSuccessHandler} used for handling an {@link OAuth2AccessTokenAuthenticationToken}
|
137 | 160 | * and returning the {@link OAuth2AccessTokenResponse Access Token Response}.
|
@@ -187,6 +210,12 @@ void configure(HttpSecurity httpSecurity) {
|
187 | 210 | this.accessTokenRequestConvertersConsumer.accept(authenticationConverters);
|
188 | 211 | tokenEndpointFilter.setAuthenticationConverter(
|
189 | 212 | new DelegatingAuthenticationConverter(authenticationConverters));
|
| 213 | + if (this.accessTokenHttpResponseConverter != null) { |
| 214 | + tokenEndpointFilter.setAccessTokenHttpResponseConverter(this.accessTokenHttpResponseConverter); |
| 215 | + } |
| 216 | + if (this.errorHttpResponseConverter != null) { |
| 217 | + tokenEndpointFilter.setErrorHttpResponseConverter(this.errorHttpResponseConverter); |
| 218 | + } |
190 | 219 | if (this.accessTokenResponseHandler != null) {
|
191 | 220 | tokenEndpointFilter.setAuthenticationSuccessHandler(this.accessTokenResponseHandler);
|
192 | 221 | }
|
|
0 commit comments