2012-06-12 253 views
1

我打算使用基于插件grails-spring-security-oauth2-provider的grails配置ad OAuth2提供程序,但升级到pring-Security-OAuth M6Grails和Oauth2弹簧安全

我能够使用/ oauth/authorize端点注册客户端并获得授权码。

但是我有一个问题,当我尝试获取访问令牌时,它似乎无法返回json。

我所说的访问令牌端点卷曲

curl -k -i -H "Accept: application/json" "https://graph.mysite.it/oauth/token?client_id=testApp&client_secret=testAppSecret&response_type=token&grant_typization_code&code=OJD7xf&redirect_uri=https%3A%2F%2Fgraph.mysiste.it%2Fxme" 

和服务器的回复与HttpMediaTypeNotAcceptableException无法找到可以接受的表示。

在google上搜索我试过在resources.xml中添加mvc:注释驱动为 让spring注册json jackson转换器,此时使用HTTP/1.1返回406不可接受“这个请求标识的资源是仅能够与根据该请求不可接受特征产生响应的“接受”报头”

走进弹簧安全的OAuth源I达到该控制器TokenEndpoint.java 调试这里我看到令牌被正确生成。 使用我已经试过手动常规控制台科林杰克逊转换器的广告,它的工作:

import org.codehaus.jackson.map.ObjectMapper 
    import org.springframework.security.oauth2.common.OAuth2AccessToken 
    def mapper = new ObjectMapper() 
    def token = new OAuth2AccessToken('fdkshdlfhklsahdklfhksaldfkl') 
    mapper.writeValueAsString(token) 

的JSON是正确打印,这样我就可以排除杰克逊配置有问题。

弹簧MVC控制器被映射在与的grails

“/oauth/token"(uri:"/oauth/token.dispatch”)

是哪里的问题?为什么Grails无法返回json?

这是我Dependecy report

回答

0

解决。

在Spring中,转换器是在ApplicationManagerGrailsPlugin文件中的grails核心中配置的RequestMappingHandlerAdapter bean中声明的。

在resource.xml中声明不起作用。

要添加转换器我重新定义了我的Grails doWithSpring方法插件

import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 
import org.springframework.http.converter.StringHttpMessageConverter 
import org.springframework.http.converter.ByteArrayHttpMessageConverter 
import org.springframework.http.converter.FormHttpMessageConverter 
import org.springframework.http.converter.xml.SourceHttpMessageConverter 
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 


class MyGrailsPlugin { 

def doWithSpring = { 
annotationHandlerAdapter(RequestMappingHandlerAdapter){ 
      messageConverters = [ 
       new StringHttpMessageConverter(writeAcceptCharset: false), 
       new ByteArrayHttpMessageConverter(), 
       new FormHttpMessageConverter(), 
       new SourceHttpMessageConverter(), 
       new MappingJacksonHttpMessageConverter() 
       ] 
      } 

} 

} 
1

我面临同样的问题豆,但宣布resource.groovy annotationHandlerAdapter配置这样的,它的工作原理:

import org.springframework.http.converter.ByteArrayHttpMessageConverter 
import org.springframework.http.converter.FormHttpMessageConverter 
import org.springframework.http.converter.StringHttpMessageConverter 
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 
import org.springframework.http.converter.xml.SourceHttpMessageConverter 
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 

beans = { 
    annotationHandlerAdapter(RequestMappingHandlerAdapter){ 
     messageConverters = [ 
       new StringHttpMessageConverter(writeAcceptCharset: false), 
       new ByteArrayHttpMessageConverter(), 
       new FormHttpMessageConverter(), 
       new SourceHttpMessageConverter(), 
       new MappingJacksonHttpMessageConverter() 
     ] 
    } 

}