2

Grails 2.2.2 に基づく Web アプリケーションで OAuth2 プロバイダーを有効にしたいと考えています。しかし、私は spring-security-oauth2-provider プラグインに苦労しています。

spring-security-oauth2-provider プラグインは spring-security-oauth2 ライブラリを使用します。spring-security-oauth2-1.0.4.RELEASEライブラリを使用するプラグイン バージョン 1.0.4-SNAPSHOT を Git から実行しようとしています。

プラグインのインストール後、この例外とスタック トレースで"oauth2ProviderFilter" Bean を初期化できなかったと言って、アプリケーションが起動しません。

| Error 2013-06-15 23:51:51,434 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error creating bean with name 'oauth2ProviderFilter': Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'oauth2ProviderFilter': Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.codehaus.groovy.grails.commons.spring.ReloadAwareAutowireCapableBeanFactory.doCreateBean(ReloadAwareAutowireCapableBeanFactory.java:122)
    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:607)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
    at org.codehaus.groovy.grails.commons.spring.DefaultRuntimeSpringConfiguration.getApplicationContext(DefaultRuntimeSpringConfiguration.java:153)
    at org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator.configure(GrailsRuntimeConfigurator.java:170)
    at org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator.configure(GrailsRuntimeConfigurator.java:127)
    at org.codehaus.groovy.grails.web.context.GrailsConfigUtils.configureWebApplicationContext(GrailsConfigUtils.java:121)
    at org.codehaus.groovy.grails.web.context.GrailsContextLoader.initWebApplicationContext(GrailsContextLoader.java:107)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.reflect.MalformedParameterizedTypeException
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:60)
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:53)
    at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
    at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
    at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:94)
    at java.lang.reflect.Method.getGenericParameterTypes(Method.java:291)
    at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:387)
    at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:114)
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:72)
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:56)
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1130)
    at java.beans.Introspector.getBeanInfo(Introspector.java:414)
    at java.beans.Introspector.getBeanInfo(Introspector.java:161)
    at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:217)
    at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:142)
    at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:324)
    at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:331)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1242)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1101)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)

oauth2 ライブラリのドキュメント ( here ) を調査したところoauth2ProviderFilter、 のインスタンスであることがわかりましたOAuth2AuthenticationProcessingFilter。このクラス ( github ) のソースを調べたところ、インスタンス化する必要のあるプロパティ ( authenticationEntryPointauthenticationManager、 )がほとんどないようです。authencticationDetailsSource依存性注入に問題があるのではないかと考えたので、resources.groovy にプラグインでoauth2ProviderFilter定義されたインスタンスへの参照で beanを定義してみました。Spring Security Core

これを resources.groovy に配置しました。

beans = {
    oauth2ProviderFilter(OAuth2AuthenticationProcessingFilter){
        authenticationEntryPoint = ref('basicAuthenticationEntryPoint')
        authenticationManager = ref('authenticationManager')
        authenticationDetailsSource = ref('authenticationDetailsSource')
    }
}

それでも問題は解決しませんでした。このフィルターをインスタンス化できないというエラーがまだあります。

私はスプリングの専門家ではないので、このエラーは Bean 作成中の依存性注入に関連している可能性があると思いますか? どこに問題があるのでしょうか?

spring-security-oauth2 ライブラリーが、Spring フレームワークのバージョン用に設計されており、grails が異なるフレームワークのバージョンを使用している可能性があり、これが問題を引き起こす可能性はありますか?

問題の原因を突き止め、最終的に問題を解決するために、次のステップは何ですか?

4

1 に答える 1

1

SNAPSHOT ではなくプラグインのリリース バージョンを実行するとどうなりますか? 最新バージョンの grails を使用すると、既存のプラグインが壊れてしまうことがよくあります。だから私がすることは...

  1. 2.2.2 grails でプラグインのリリース バージョンを使用してみてください。
  2. それでもうまくいかない場合は、grails のバージョンをさかのぼって、リリースされたプラグインで古いバージョンを試してみます。
  3. 古いバージョンが機能しない場合は、セットアップに何かが欠けている可能性があるため、それが何であるかを突き止めようとします.
  4. 古いバージョンで動作し、セットアップに基づいてセットアップが適切に見える場合は、grailsで何が起きているかを尋ねるか、 JIRA チケットを開きます。

考慮すべきもう 1 つのことは、プラグインの新旧、および以前にいくつのバグがあったかです。プラグインをデバッグすることは価値のある努力だったので何度も決定しましたが、問題が多すぎて将来的に私たちを遠ざけることになるため、使用しないことにしたこともあります.

于 2013-06-16T13:50:31.480 に答える