|
|
|
@ -18,6 +18,7 @@ package org.springframework.security.oauth2.core.http.converter; |
|
|
|
import java.nio.charset.Charset; |
|
|
|
import java.nio.charset.Charset; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.core.ParameterizedTypeReference; |
|
|
|
import org.springframework.core.ParameterizedTypeReference; |
|
|
|
import org.springframework.core.convert.converter.Converter; |
|
|
|
import org.springframework.core.convert.converter.Converter; |
|
|
|
@ -45,8 +46,8 @@ import org.springframework.util.Assert; |
|
|
|
public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpMessageConverter<OAuth2AccessTokenResponse> { |
|
|
|
public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpMessageConverter<OAuth2AccessTokenResponse> { |
|
|
|
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; |
|
|
|
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; |
|
|
|
|
|
|
|
|
|
|
|
private static final ParameterizedTypeReference<Map<String, String>> PARAMETERIZED_RESPONSE_TYPE = |
|
|
|
private static final ParameterizedTypeReference<Map<String, Object>> PARAMETERIZED_RESPONSE_TYPE = |
|
|
|
new ParameterizedTypeReference<Map<String, String>>() {}; |
|
|
|
new ParameterizedTypeReference<Map<String, Object>>() {}; |
|
|
|
|
|
|
|
|
|
|
|
private GenericHttpMessageConverter<Object> jsonMessageConverter = HttpMessageConverters.getJsonMessageConverter(); |
|
|
|
private GenericHttpMessageConverter<Object> jsonMessageConverter = HttpMessageConverters.getJsonMessageConverter(); |
|
|
|
|
|
|
|
|
|
|
|
@ -70,10 +71,16 @@ public class OAuth2AccessTokenResponseHttpMessageConverter extends AbstractHttpM |
|
|
|
throws HttpMessageNotReadableException { |
|
|
|
throws HttpMessageNotReadableException { |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
try { |
|
|
|
|
|
|
|
// gh-6463
|
|
|
|
|
|
|
|
// Parse parameter values as Object in order to handle potential JSON Object and then convert values to String
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
Map<String, String> tokenResponseParameters = (Map<String, String>) this.jsonMessageConverter.read( |
|
|
|
Map<String, Object> tokenResponseParameters = (Map<String, Object>) this.jsonMessageConverter.read( |
|
|
|
PARAMETERIZED_RESPONSE_TYPE.getType(), null, inputMessage); |
|
|
|
PARAMETERIZED_RESPONSE_TYPE.getType(), null, inputMessage); |
|
|
|
return this.tokenResponseConverter.convert(tokenResponseParameters); |
|
|
|
return this.tokenResponseConverter.convert( |
|
|
|
|
|
|
|
tokenResponseParameters.entrySet().stream() |
|
|
|
|
|
|
|
.collect(Collectors.toMap( |
|
|
|
|
|
|
|
Map.Entry::getKey, |
|
|
|
|
|
|
|
entry -> entry.getValue().toString()))); |
|
|
|
} catch (Exception ex) { |
|
|
|
} catch (Exception ex) { |
|
|
|
throw new HttpMessageNotReadableException("An error occurred reading the OAuth 2.0 Access Token Response: " + |
|
|
|
throw new HttpMessageNotReadableException("An error occurred reading the OAuth 2.0 Access Token Response: " + |
|
|
|
ex.getMessage(), ex, inputMessage); |
|
|
|
ex.getMessage(), ex, inputMessage); |
|
|
|
|