2010-01-25 72 views
1

除非需要,我如何不實例化Spring Security?我如何延遲加載Spring Security?

我使用的是Google App Engine,所以我的網絡應用程序的啓動時間很重要。有時當用戶請求一個頁面時,他們必須等待我的web應用程序實例化的全部時間才能得到響應(這稱爲加載請求)。

我的應用程序的某些頁面不需要驗證。對於這些頁面,如果請求是一個加載請求,我不希望用戶不得不等待額外的〜1.5秒來讓Spring Security實例化。

我已經想出瞭如何延遲加載我的應用程序的所有其他組件,Spring Security是我唯一不知道如何的。任何人有想法?

編輯:如果有人知道如何從代碼實例化Spring Security而不是使用applicationContext-security.xml,那麼我想我可以弄清楚如何延遲加載它。

回答

1

好了,我終於想通了。我不得不將子類org.springframework.web.context.ContextLoaderListenerorg.springframework.web.filter.DelegatingFilterProxy做任何事,直到我對它們調用一個激活方法。

+0

)你最終做了什麼?我面臨着幾乎相同的問題。 – hleinone 2010-11-06 19:56:06

+0

@hleinone - 最後我最終擺脫了Spring。我建議不要擔心懶惰的加載彈簧儘管如此,我認爲未來冷啓動將不會成爲問題,請參閱http://blog.listry.com/2010/10/app-engine-warm-up-requests-death-of.html – Kyle 2010-11-07 23:33:25

+0

I真的希望你的假設將成爲現實! – hleinone 2010-11-07 23:39:45

0

可以在web.xml配置<url-pattern>年春保安過濾器映射的匹配確保的資源只(以及登錄,註銷頁面和其他資源需要Spring Security的處理),並用自己的懶惰包過濾器的默認包裝,就像你用DispatcherServlet做的那樣。

編輯: 這個問題似乎比我想象的更復雜。您也可以嘗試定義您的安全XML作爲<beans default-lazy-init="true" ...>

+0

我與Spring Security的問題在於,僅僅定義了applicationContext-security.xml會導致Spring Security實例化。我完全通過完全評論Spring Security web.xml過濾器聲明來測試它,但仍然具有xml配置。如果我能弄清楚如何實例化xml所做的所有事情,但是在代碼中執行它,那麼我認爲這將起作用。 – Kyle 2010-01-25 18:16:27

+1

剛剛嘗試了default-lazy-init =「true」。不幸的是:( – Kyle 2010-01-25 18:31:53

1

的黑客描述here工作對我來說:

...你能解決這個問題的任何LazyInitTargetSource的UserDetailsS​​ervice的。

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