繁体   English   中英

没有命名bean,但定义了bean

[英]No bean named but bean is defined

我正在开发grail-oauth-plugin的更新版本,该版本支持上一个spring-oauth

我的插件版本运行良好,并且已经实现了一个可工作的oauth2服务器。

但是现在我想添加一个这样的自定义授予

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'

但是如您所见,bean myTokenGranter已定义。 而且,如果我删除了自定义授予定义,则项目将启动,并且可以访问myTokenGranter bean。

寻找到全栈跟踪,我发现异常发生在春季oatuh2服务器bean定义中,在它尝试查找我的bean的行中解析AuthorizationServerBeanDefinitionParser.java

parserContext.getRegistry().getBeanDefinition(customGranterRef);

其中customGranterRef =“ myTokenGranter”

因此我怀疑Spring Ouath或Grails BeanBuilder中存在一个错误,该错误无法使我的“ myTokenGranter”在服务器解析器中可见。 或在grails bean定义DSL中出错。


感谢您的关注。

更深入地调试应用程序我发现问题可能出在Grails BeanBuilder如何转换命名空间的Spring DSL。

如果我调试检查我的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中,也存在问题。

但是问题解决了,如果我将自定义标记Bean声明移到resources.xml中。

我真的不知道BeanBuilder DSL是如何工作的,但是如果出现问题,问题似乎就在那里(您的示例在XML中工作得很好)。 您是否可以分两步完成,所以在处理OAuth2名称解析时,肯定可以使用myTokenGranter的bean定义?

解决了黑客入侵Spring Security Oauth

看到这个提交

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM