2013-03-15 2 views
0

Я работаю на обновление версии Грааля-OAuth-плагин, который поддерживает прошлой весной-OAuthНет боб не назван, но боб определяется

Моя версия плагина работает хорошо, и я реализовал сервер Workin 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 определяется, как вы можете видеть. И если я удалю определение пользовательского гранта, проект начнется, и я могу получить доступ к bean-файлу myTokenGranter.

Глядя на fullstack след я вижу, что исключение происходит в spring oatuh2 server bean definition parse AuthorizationServerBeanDefinitionParser.java в строке, где пытается найти мои компоненты-

parserContext.getRegistry().getBeanDefinition(customGranterRef); 

где customGranterRef = «myTokenGranter»

, так что я подозреваю, что есть ошибка в Spring Ouath или в Grails BeanBuilder, которая не позволяет моему «myTokenGranter» быть видимым в парсере сервера. Или сделать некоторую ошибку в определении зерновых зерен DSL.


Благодарим Вас за интерес.

Отладка приложения более глубоко Я обнаружил, что проблема, вероятно, связана с тем, как грабли BeanBuilder работают при переводе родного DSL-источника.

Если я отладки точки, где проверяется мой боб (в 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] 

И не все другие decleared бобы ...


проблема существует, даже если я перехожу объявление ouath сервера внутри resources.xml, сохраняя мой пользовательский маркер декларации даритель боб внутри resources.groovy.

Но проблема решается, если я перемещаю пользовательскую декларацию bean-токена в resources.xml.

+0

сделал и стараться размещать в весенне-безопасности OAuth форуме? – OhadR

+1

@ OhadR нет, я попробую. Спасибо. –

ответ

0

решаемые взлома Spring Security OAuth

увидеть это commit

0

Я действительно не знаю, как работает BeanBuilder DSL, но похоже, что проблема возникает, если есть проблема (ваш пример отлично работает в XML). Можете ли вы сделать это в два этапа, поэтому определение bean для myTokenGranter определенно доступно, когда обрабатывается имя пользователя OAuth2?

+0

Что значит «два шага»? –