2013-03-15 69 views
0

我工作的圣杯OAuth的插件的更新版本,支持去年春天,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' 

但豆myTokenGranter定义,你可以看到。如果我删除了自定义授权定义项目启动,我可以访问myTokenGranter bean。

寻找到fullstack跟踪我看到它试图找到我的豆例外发生在spring oatuh2 server bean definition parse AuthorizationServerBeanDefinitionParser.java在该行

parserContext.getRegistry().getBeanDefinition(customGranterRef); 

其中customGranterRef =“myTokenGranter”

所以我怀疑有Spring Ouath或Grails BeanBuilder中的一个错误,它不会让我的“myTokenGranter”在服务器解析器中可见。或者在grails bean定义DSL中发生一些错误。


谢谢您的关注。

更深入地调试应用程序我发现问题可能在于BeanBuilder如何在翻译命名空间的DSL中工作。

如果我调试

在行

parserContext.getRegistry().getBeanDefinition(customGranterRef); 

在我的豆被选中(在AuthorizationServerBeanDefinitionParser.java)的点,如果我检查的

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中,保持内部resources.groovy我的自定义令牌授予者Bean声明

而且也不是所有其他decleared豆...


的问题存在。

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

+0

没有ü尝试在弹簧安全的OAuth论坛张贴? – OhadR 2013-03-15 20:26:42

+1

@OhadR不,我会试试。谢谢。 – 2013-03-18 08:42:08

回答

0

解决黑客春季安全的Oauth

看到这个commit

0

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

+0

“两步”是什么意思? – 2013-03-18 08:43:04