2013-06-15 8 views
2

Grails 2.2.2를 기반으로하는 웹 응용 프로그램에서 OAuth2 공급자를 활성화하려고합니다. 그러나 나는 spring-security-oauth2-provider 플러그인으로 어려움을 겪고있다.Grails의 Spring Oauth2 공급자 - 종속성

spring-security-oauth2-provider 플러그인은 spring-security-oauth2 라이브러리를 사용합니다. Git에서 플러그인 버전 1.0.4-SNAPSHOT을 실행하려고하는데, spring-security-oauth2-1.0.4.RELEASE 라이브러리를 사용합니다. 설치를 플러그인 한 후

, 내 응용 프로그램은이 예외 스택 추적과 "oauth2ProviderFilter" 빈을 초기화 할 수 없습니다 말하 시작되지 않습니다 :

| 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) 

(here) OAuth2를 라이브러리 문서에 investigationg 후, oauth2ProviderFilterOAuth2AuthenticationProcessingFilter의 인스턴스라는 것을 알았습니다. 이 클래스의 소스 (github)를 검사 한 후에는 인스턴스화해야 할 속성 (authenticationEntryPoint, authenticationManager, authencticationDetailsSource)이 거의없는 것처럼 보입니다. 나는 의존성 삽입에 문제가있을 수 있다고 생각하여, Spring Security Core 플러그인으로 정의 된 인스턴스에 대한 참조로 resources.groovy에 oauth2ProviderFilter bean을 정의하려고 시도했다.

나는 나의 resources.groovy이 배치 : 문제가 해결되지 않은

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

는 여전히이 필터는 인스턴스화 할 수없는 존재라고 오류입니다.

저는 스프링 전문가가 아니기 때문에이 오류가 bean 작성 중 종속성 삽입과 관련이 있다고 생각합니까? 문제가있는 곳은 어디입니까?

spring-security-oauth2 라이브러리는 grails가 다른 프레임 워크 버전을 사용하고있을 수있는 스프링 프레임 워크 버전 용으로 설계 될 수 있으며 이는 문제를 일으킬 수 있습니까?

문제의 원인을 찾고 결국 문제를 해결하기 위해 취할 수있는 다음 단계는 무엇입니까?

+0

이 문제는 오래된 문제임을 알고 있습니다. 그러나 어떻게 해결하셨습니까? 지금 당장 똑같은 문제가있다. (grails 2.2.4, : spring-security-oauth2-provider : 1.0.5.2) – Macros

답변

1

SNAPSHOT이 아닌 플러그인의 릴리스 버전을 실행하면 어떻게됩니까? 나는 최신 버전의 grails로 작업 할 때 여러 번 기존 플러그인을 손상시키는 것을 발견했습니다. 그래서 내가 뭘 할 것입니다 ...

  1. 2.2.2 grails로 플러그인의 릴리스 버전을 사용해보십시오.
  2. 그래도 작동하지 않는다면, 내 grails 버전을 취소하고 출시 된 플러그인으로 이전 버전을 사용해 보겠습니다.
  3. 이전 버전이 작동하지 않으면 설정에 누락 된 항목이있을 수 있으므로 그 내용을 파악하려고합니다.
  4. 일이 이전 버전에서 작동하고 설정을 기반으로하는 것이 좋을 것 같으면 grails nabble에 무엇이 있는지 및/또는 JIRA ticket을 열어달라고 요청할 것입니다.

또 다른 고려해야 할 점은 플러그인이 얼마나 젊고 오래되었는지와 이전 버그가 얼마나 많은지입니다. 많은 노력을했기 때문에 여러 번 플러그인을 디버깅하기로 결정했으나 문제가 너무 많아서 나중에 사용하지 않기 때문에 사용하지 않기로 결정했을 때가 있습니다.

+0

플러그인의 실제 작성자 (또는 관리자)는 최근에 플러그인을 2.2.2 grails 버전으로 업그레이드하고 Spring으로 업그레이드했다. -security-oauth2 1.0.4.RELEASE. – jjczopek

관련 문제