在需要之前,如何才能实例化Spring Security?
我正在使用Google App Engine,因此我的网络应用的启动时间非常重要。有时,当用户请求页面时,他们必须等待我的Web应用程序实例化的所有时间才能获得响应(这称为加载请求)。
我的应用的某些页面不需要身份验证。对于这些页面,如果请求是加载请求,我不希望用户必须等待额外的~1.5秒才能使Spring Security实例化。
我已经知道如何延迟加载我的应用程序的所有其他组件,Spring Security是唯一一个我不知道如何。有人有想法吗?
编辑:如果有人知道如何从代码中实例化Spring Security而不是使用applicationContext-security.xml,那么我想我可以弄清楚如何延迟加载它。
答案 0 :(得分:1)
好吧,我终于明白了。我必须将org.springframework.web.context.ContextLoaderListener
和org.springframework.web.filter.DelegatingFilterProxy
子类化为不执行任何操作,直到我们对它们调用activate方法。
答案 1 :(得分:1)
描述here的黑客为我工作:
...您可以使用UserDetailsService的任何LazyInitTargetSource解决此问题。
<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>
答案 2 :(得分:0)
您可以在<url-pattern>
中配置web.xml
的Spring Security过滤器映射,以仅匹配安全资源(以及登录注销页面和需要Spring Security处理的其他资源),并将其换行使用您自己的惰性包装器的默认过滤器,就像使用DispatcherServlet
一样。
修改强>
这个问题似乎比我想象的要复杂得多。您还可以尝试将安全xml定义为<beans default-lazy-init="true" ...>