1

プラグインgrails-spring-security-oauth2-providerに基づいてgrailsを使用して広告OAUTH2プロバイダーを構成しようとしていますが、 pring-Security-OAuthM6にアップグレードしています。

/ 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 convertorを登録させようとしました。この時点で、呼び出しはHTTP/1.1で返されます。406受け入れられません。リクエスト「accept」ヘッダーによると受け入れられない特性を持つ

春のセキュリティ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構成の問題を除外できます。

スプリングMVCコントローラーはGrailsにマッピングされています

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

問題はどこにありますか?なぜgrailsはjsonを返すことができないのですか?

これは私のDependecyレポートです

4

2 に答える 2

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()
        ]
    }

}
于 2013-02-14T00:01:23.283 に答える
0

解決しました。

Springでは、コンバーターは、ファイルControllersGrailsPluginのgrailsコアで構成されたBeanRequestMappingHandlerAdapterで宣言されます。

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()
                ]
            }

}

}
于 2012-06-12T14:44:45.687 に答える