[英]Grails and Oauth2 Spring security
我正在嘗試基於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的服務器回復找不到可接受的表示形式。
在谷歌上搜索,我嘗試添加resources.xml mvc:annotation-driven以讓spring注冊json jackson轉換器,這時的HTTP / 1.1調用返回406 Not Acceptable“此請求標識的資源僅能夠生成響應具有根據請求“接受”標頭不可接受的特征”
進入春季安全oauth源,我到達了此控制器TokenEndpoint.java。在這里調試時,我看到令牌已正確生成。 我已經使用groovy控制台嘗試手動整理傑克遜轉換器廣告,並且效果良好:
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/token"(uri:"/oauth/token.dispatch”)
問題出在哪里? 為什么grails無法返回json?
這是我的Dependecy報告
我遇到了同樣的問題,但是以這種方式在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()
]
}
}
解決了。
在Spring中,轉換器是在bean RequestMappingHandlerAdapter中聲明的,該bean是在文件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()
]
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.