2010-01-25 4 views
1

필요할 때까지 스프링 보안을 어떻게 인스턴스화하지 않습니까?Spring Security를 ​​어떻게 지연로드합니까?

Google App Engine을 사용 중이므로 웹 앱 시작 시간이 중요합니다. 때때로 사용자가 페이지를 요청하면 응답을 받기 전에 내 웹 앱이 인스턴스화 될 때까지 기다려야합니다 (로드 요청이라고 함).

일부 앱 페이지에는 인증이 필요하지 않습니다. 이 페이지들에 대한 요청이 로딩 요청이라면 사용자가 Spring Security가 인스턴스화되기까지 1.5 초를 더 기다려야하는 것을 원하지 않습니다.

이미 내 응용 프로그램의 다른 모든 구성 요소를 게으른로드하는 방법을 알아 냈습니다. 스프링 보안이 내가 모르는 유일한 방법입니다. 누구나 아이디어가 있으십니까?

EDIT : applicationContext-security.xml을 사용하는 대신 코드에서 스프링 보안을 인스턴스화하는 방법을 아는 사람이라면 누구나 게으른로드 방법을 알아낼 수 있다고 생각합니다.

답변

1

글쎄, 마침내 알아 냈습니다. org.springframework.web.context.ContextLoaderListenerorg.springframework.web.filter.DelegatingFilterProxy 하위 클래스에 내가 그들에게 정품 인증 메서드를 호출 할 때까지 아무것도하지 않아야했다.

은 ... 당신은 UserDetailsService도에 대한 LazyInitTargetSource으로이 문제를 해결할 수 있습니다 :

+0

정확히 무슨 일을 한거야? 똑같은 문제가있다. – hleinone

+0

@hleinone - 결국 나는 봄을 완전히 없애 버렸다. 나는 게으른 로딩 봄 걱정하지 않는 것이 좋습니다. 차가운 시작은 실제로 미래에 문제가 될 것이라고 생각하지 않습니다. http://blog.listry.com/2010/10/app-engine-warm-up-requests-death-of.html – Kyle

+0

I를 참조하십시오. 정말 당신의 가정이 현실이되기를 바랍니다! – hleinone

0

에있는 스프링 보안 필터 매핑의 <url-pattern>을 보안 리소스 (로그인 - 로그 아웃 페이지 및 스프링 보안 처리가 필요한 다른 리소스는 물론)와 일치하도록 구성하고 기본 필터를 자신의 게으른 것으로 래핑 할 수 있습니다 래퍼 (wrapper), DispatcherServlet.

편집 : 문제는 생각보다 복잡해 보입니다. 보안 XML을 정의하려고 시도 할 수도 있습니다 <beans default-lazy-init="true" ...>

+0

스프링 보안 문제는 단순히 정의 된 applicationContext-security.xml이 스프링 보안을 인스턴스화하게하는 것입니다. 필자는 Spring Security web.xml 필터 선언을 완전히 주석 처리했지만 아직 xml 구성을 가지고 테스트했다. XML에서하는 모든 것을 인스턴스화하는 방법을 알아낼 수는 있지만 코드에서 수행하는 방법을 이해할 수 있다면 작동한다고 생각합니다. – Kyle

+1

방금 ​​default-lazy-init = "true"를 시도했습니다. 행운을 빌어 요 : ( – Kyle

1

는 해킹 here이 나를 위해 일한 설명했다.

<bean id="userDetailsService" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="targetSource"> 
     <bean class="org.springframework.aop.target.LazyInitTargetSource"> 
      <property name="targetBeanName" value="targetUserDetailsService"/> 
     </bean> 
    </property> 
</bean> 

<bean id="targetUserDetailsService" class="MyCustomUserService" lazy-init="true"> 
    .... 
</bean> 
관련 문제