【问题标题】:How do I lazy load Spring Security?如何延迟加载 Spring Security?
【发布时间】:2011-01-09 05:11:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java spring-security lazy-loading web.xml


    【解决方案1】:

    好吧,我终于想通了。我必须继承 org.springframework.web.context.ContextLoaderListenerorg.springframework.web.filter.DelegatingFilterProxy 才能不做任何事情,直到我调用它们的激活方法。

    【讨论】:

    • 你到底做了什么?我面临着几乎相同的问题。
    • @hleinone - 最后我完全摆脱了 Spring。我建议不要真正担心延迟加载弹簧。我不认为冷启动在未来真的会成为问题。见blog.listry.com/2010/10/…
    • 我真的希望你的假设能成为现实!
    • 我不明白你的解决方案。你能解释一下 ContextLoaderListener,DelegatingFilterProxy。这是我在运行时进行 Spring Security 延迟加载的场景。 stackoverflow.com/questions/68831257/…我仍然没有得到任何合适的解决方案。
    【解决方案2】:

    here 描述的黑客对我有用:

    ...您可以使用 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>
    

    【讨论】:

      【解决方案3】:

      您可以在web.xml 中配置&lt;url-pattern&gt;s 的 Spring Security 过滤器映射以仅匹配受保护的资源(以及登录-注销页面和其他需要 Spring Security 处理的资源),并将默认过滤器包装为你自己的惰性包装器,就像你对 DispatcherServlet 所做的那样。

      编辑: 这个问题似乎比我想象的要复杂。您也可以尝试将您的安全 xml 定义为 &lt;beans default-lazy-init="true" ...&gt;

      【讨论】:

      • Spring Security 遇到的问题是,简单地定义 applicationContext-security.xml 会导致 Spring Security 实例化。我通过完全注释掉 Spring Security web.xml 过滤器声明来测试这一点,但仍然具有 xml 配置。如果我能弄清楚如何实例化 xml 所做的一切,但在代码中进行,那么我认为这会起作用。
      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多