如何在需要之前不实例化 Spring Security?

我正在使用 Google App Engine,因此我的网络应用程序的启动时间很重要。有时,当用户请求页面时,他们必须一直等待我的网络应用程序实例化才能获得响应(这称为加载请求)。

我的应用程序的某些页面不需要身份验证。对于这些页面,如果请求是加载请求,我不希望用户必须等待额外的约 1.5 秒才能实例化 Spring Security。

我已经弄清楚如何延迟加载应用程序的所有其他组件,Spring Security 是唯一我不知道如何加载的组件。有人有主意吗?

编辑:如果有人知道如何从代码实例化 Spring Security 而不是使用 applicationContext-security.xml,那么我想我可以弄清楚如何延迟加载它。

有帮助吗?

解决方案

好了,我终于想通了。我只好子类org.springframework.web.context.ContextLoaderListenerorg.springframework.web.filter.DelegatingFilterProxy,直到我称之为激活方法对他们没有做任何事情。

其他提示

黑客描述 这里 为我工作:

...您可以使用 UserDetailsS​​ervice 的任何 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>

您可以在<url-pattern>配置Spring Security过滤器映射的web.xmls相匹配的安全资源只(以及登录,注销页面和其他资源需要Spring Security的处理),并用自己的懒惰包装纸包裹默认筛选器,像你一样有DispatcherServlet

修改 这个问题似乎比我想象的更复杂。您也可以尝试定义您的安全XML作为<beans default-lazy-init="true" ...>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top