1

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

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

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

我已经想出了如何延迟加载我的应用程序的所有其他组件,Spring Security 是我唯一不知道的。有人有想法吗?

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

4

3 回答 3

1

好吧,我终于想通了。在我调用它们的激活方法之前,我必须进行子类化org.springframework.web.context.ContextLoaderListener并且org.springframework.web.filter.DelegatingFilterProxy不做任何事情。

于 2010-01-26T18:42:34.037 回答
1

这里描述的黑客对我有用:

...您可以使用 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>
于 2011-05-12T11:53:45.750 回答
0

您可以配置<url-pattern>Spring Security 过滤器映射web.xml以仅匹配受保护的资源(以及登录-注销页面和其他需要 Spring Security 处理的资源),并使用您自己的惰性包装器包装默认过滤器,就像您使用DispatcherServlet.

编辑: 问题似乎比我想象的要复杂。您还可以尝试将您的安全 xml 定义为<beans default-lazy-init="true" ...>

于 2010-01-25T18:13:21.857 回答