2013-06-27 86 views
1

我正在使用1.0.0.RELEASE版本的spring-security-oauth2。我對Maven的依賴是:OAuth2AuthenticationProcessingFilter bean創建失敗,出現MalformedParameterizedTypeException

<dependency> 
    <groupId>org.springframework.security.oauth</groupId> 
    <artifactId>spring-security-oauth2</artifactId> 
    <version>1.0.0.RELEASE</version> 
</dependency> 

這是我的應用程序上下文中的bean定義。

<bean id="inMemoryTokenStore" 
    class="org.springframework.security.oauth2.provider.token.InMemoryTokenStore"> 
</bean> 

<bean id="tokenServices" 
    class="org.springframework.security.oauth2.provider.token.DefaultTokenServices"> 
    <property name="tokenStore" ref="inMemoryTokenStore" /> 
</bean> 

<bean id="oAuth2AuthenticationManager" 
    class="org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager"> 
    <property name="tokenServices" ref="tokenServices" /> 
</bean> 

<bean id="oAuth2AuthProcessingFilter" 
    class="org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter"> 
    <property name="authenticationManager" ref="oAuth2AuthenticationManager" /> 
    <qualifier value="oAuth2"/> 
</bean> 

當我嘗試創建bean時,出現以下奇怪的異常,沒有具體的信息。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'oAuth2AuthProcessingFilter' defined in class path resource [com/etrade/spring/security/oauth/web/application/OAuth2Filters-context.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103) 
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1) 
at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228) 
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124) 
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148) 
... 28 more 
Caused by: java.lang.reflect.MalformedParameterizedTypeException 
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:42) 
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:35) 
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:77) 
at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:86) 
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:122) 
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) 
at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:76) 
at java.lang.reflect.Method.getGenericParameterTypes(Method.java:282) 
at org.springframework.core.GenericTypeResolver.getTargetType(GenericTypeResolver.java:65) 
at org.springframework.core.GenericTypeResolver.resolveParameterType(GenericTypeResolver.java:80) 
at org.springframework.beans.GenericTypeAwarePropertyDescriptor.getWriteMethodParameter(GenericTypeAwarePropertyDescriptor.java:150) 
at org.springframework.beans.GenericTypeAwarePropertyDescriptor.getPropertyType(GenericTypeAwarePropertyDescriptor.java:132) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.isExcludedFromDependencyCheck(AbstractAutowireCapableBeanFactory.java:1269) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1245) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1101) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
... 41 more 

我#2閱讀類似的問題,並試圖像覈實沒有春天版本衝突,但沒有任何幫助的建議。請讓我知道如何解決這個問題。

+0

沒有春季版本衝突,但春季安全版本有衝突。其中一個依賴使用了Spring Security 3.0.7.RELEASE版本。升級到使用3.1.3.RELEASE版本的Spring安全性後,問題就解決了。 – Kannan

回答

0

我想我已經對這個問題提出了一些看法,因爲我也在深入研究這個問題。

如果我們看一下OAuth2AuthenticationProcessingFilter.java,它設置的authenticationDetailsSource作爲AuthenticationDetailsSource<HttpServletRequest, ?>類型,但是,這不是模板,直到至少3.1.0.M1版本(見SEC-1486source on github)。

簡而言之,spring-security-oauth 需要 3.1.x的spring安全工作。我會嘗試一個混亂的解決方法,直到我們可以升級它,因爲我們依賴於需要3.0.x的grails插件。

相關問題