我想使用基于插件grails-spring-security-oauth2-provider的grails配置广告OAUTH2提供程序,但已升级到pring-Security-OAuth M6。
我能够使用/ oauth / authorize端点注册客户端并获取授权码。
但是当我尝试获取访问令牌时遇到问题,似乎它无法返回json。
我用curl
调用访问令牌端点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:annotation-driven to 让spring注册json jackson转换器,此时调用返回HTTP / 1.1 406 Not Acceptable“此请求标识的资源只能根据请求”接受“标题生成具有不可接受特性的响应”
进入spring security oauth source我到达了这个控制器TokenEndpoint.java 在这里调试我看到令牌已正确生成。 使用groovy控制台我尝试手动colling jackson转换器广告它工作:
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,因此我可以排除jackson配置中的问题。
spring mvc控制器用grails映射到
“/的OAuth /令牌”(URI: “/ OAuth的/ token.dispatch”)
问题出在哪里?为什么grails不能返回json?
这是我的Dependecy report
答案 0 :(得分: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()
]
}
}
答案 1 :(得分:0)
解决。
在Spring中,转换器在bean RequestMappingHandlerAdapter中声明,该文件在文件ControllersGrailsPlugin中的grails核心中配置。
在resource.xml中声明无效。
要添加转换器,我已经在grails插件的doWithSpring方法中重新定义了bean
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()
]
}
}
}