Spring OAuth2缺少DefaultOAuth2Token的转换器

时间:2015-10-12 05:58:14

标签: converter spring-security-oauth2

我使用的是Spring OAuth 2.0.7版。从阅读源代码我认为端点/ oauth / token应该配置DefaultRequestTokenConverter,但是我得到以下异常:

org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(java.security.Principal,java.util.Map<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException]: java.lang.IllegalArgumentException: No converter found for return value of type: class org.springframework.security.oauth2.common.DefaultOAuth2AccessToken

在org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor中找不到可生成的媒体类型:

if (returnValue != null && producibleMediaTypes.isEmpty()) {
    throw new IllegalArgumentException("No converter found for return value of type: " + returnValueClass);
}

在任何情况下,我也尝试为端点明确设置转换器:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.accessTokenConverter(new DefaultAccessTokenConverter()).tokenStore(tokenStore());
}

异常仍然存在。

我也尝试在Spring MVC配置中设置消息转换器:

@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new FormOAuth2AccessTokenMessageConverter());
        converters.add(new FormOAuth2ExceptionHttpMessageConverter());
    }
}

但异常仍然存在。

我很困惑在哪里设置消息转换器。

1 个答案:

答案 0 :(得分:5)

如果有人遇到同样的问题,在项目的pom.xml中添加以下内容可以解决这个丢失的转换器错误:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.2</version>
</dependency>