昨年の春の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宣言を移動すると、問題は解決します。