0

昨年の春のoauthをサポートするgrail-oauth-pluginの更新バージョンに取り組んでいます

プラグインのバージョンは正常に機能し、workinoauth2サーバーを実装しました。

しかし今、私はこのように定義されたカスタムグラントを追加したいと思います

def doWithSpring = {

    myTokenGranter(MyTokenGranter)

    xmlns oauth:"http://www.springframework.org/schema/security/oauth2"

    oauth.'authorization-server'( /* ... many definitions here ... */){
        /* ... many definitions here ... */
        oauth.'custom-grant'('token-granter-ref': "myTokenGranter")
    }
}

しかし、私は私に言う例外を受け取ります:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myTokenGranter'

しかし、ご覧のとおり、BeanmyTokenGranterは定義されています。また、カスタムグラント定義を削除すると、プロジェクトが開始され、myTokenGranterBeanにアクセスできます。

フルスタックトレースを見ると、春のoatuh2サーバーBean定義で例外が発生していることがわかります。Beanを見つけようとする行のAuthorizationServerBeanDefinitionParser.javaを解析します。

parserContext.getRegistry().getBeanDefinition(customGranterRef);

ここで、customGranterRef = "myTokenGranter"

そのため、SpringOuathまたはGrailsBeanBuilderに、サーバーパーサーに「myTokenGranter」が表示されないバグがあると思われます。または、grailsBean定義DSLでエラーが発生しました。


ご関心をお寄せいただきありがとうございます。

アプリをより深くデバッグすると、問題はおそらく、名前空間付きのSpringDSLの変換でgrailsBeanBuilderがどのように機能するかにあることがわかりました。

Beanがチェックされるポイントをデバッグする場合(AuthorizationServerBeanDefinitionParser.java内)

行で

parserContext.getRegistry().getBeanDefinition(customGranterRef);

のチェ結果を確認すると

 parserContext.getRegistry().getBeanDefinitionNames()

この豆だけ見せてくれる

[org.springframework.context.annotation.internalConfigurationAnnotationProcessor
 org.springframework.context.annotation.internalAutowiredAnnotationProcessor
 org.springframework.context.annotation.internalRequiredAnnotationProcessor
 org.springframework.context.annotation.internalCommonAnnotationProcessor
 org.springframework.context.annotation.internalPersistenceAnnotationProcessor
 org.springframework.aop.config.internalAutoProxyCreator
 org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0
 org.springframework.transaction.interceptor.TransactionInterceptor#0
 org.springframework.transaction.config.internalTransactionAdvisor
 oauth2TokenGranter
 oauth2AuthorizationCodeServices
 oauth2AuthorizationRequestManager]

そして、他のすべてのクリアされた豆ではありません...


ouathサーバー宣言をresources.xml内に移動し、カスタムトークングランターBean宣言をresources.groovy内に保持しても、問題が存在します。

しかし、resources.xml内でカスタムトークンBean宣言を移動すると、問題は解決します。

4

2 に答える 2

0

Solved hacking Spring Security Oauth

see this commit

于 2013-03-18T14:26:24.950 に答える
0

BeanBuilder DSLがどのように機能するかはよくわかりませんが、問題がある場合は問題があるようです(例はXMLで問題なく機能します)。2つのステップでそれを行うことができるので、myTokenGranterのBean定義は、OAuth2名前空間が処理されるときに確実に利用可能になりますか?

于 2013-03-15T21:19:55.923 に答える