Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未命名bean,但定义了bean_Java_Spring_Grails_Groovy_Spring Security - Fatal编程技术网

Java 未命名bean,但定义了bean

Java 未命名bean,但定义了bean,java,spring,grails,groovy,spring-security,Java,Spring,Grails,Groovy,Spring Security,我正在开发支持去年春天oauth的GrailOAuth插件的更新版本 我的插件版本运行良好,我已经在oauth2服务器上实现了一个工作 但是现在我想添加这样定义的自定义授权 def doWithSpring = { myTokenGranter(MyTokenGranter) xmlns oauth:"http://www.springframework.org/schema/security/oauth2" oauth.'authorization-server'

我正在开发支持去年春天oauth的GrailOAuth插件的更新版本

我的插件版本运行良好,我已经在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的定义如您所见。如果我删除自定义授权定义,项目就会启动,我可以访问MyTokenGranterBean

查看fullstack跟踪,我发现异常发生在它试图查找我的bean的行中

parserContext.getRegistry().getBeanDefinition(customGranterRef);
其中customGranterRef=“myTokenGranter”

因此,我怀疑SpringOuath或GrailsBeanBuilder中存在一个bug,它不允许我的“myTokenGranter”在服务器解析器中可见。或者在grailsbean定义DSL中出错


谢谢你的关注

更深入地调试应用程序,我发现问题可能在于grails BeanBuilder如何翻译名称空间的spring DSL

如果我调试bean的签入点(in)

在行

parserContext.getRegistry().getBeanDefinition(customGranterRef);
如果我检查了che的结果

 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中,将自定义令牌granter bean声明保留在resources.groovy中,问题仍然存在


但是如果我将自定义令牌bean声明移动到resources.xml中,问题就解决了。

我真的不知道BeanBuilder DSL是如何工作的,但是如果有问题,问题似乎就在那里(您的示例在xml中工作得很好)。可以分两步完成吗,这样在处理OAuth2 namepsace时myTokenGranter的bean定义肯定是可用的?

解决了hacking Spring Security Oauth问题


看到这个了吗?

你有没有试着在春季安全oauth论坛上发帖?@OhadR没有,我会试试。谢谢。你说的“两步”是什么意思?