2010-01-25 47 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>