Вопрос

Как мне не создавать экземпляр Spring Security до тех пор, пока мне это не понадобится?

Я использую Google App Engine, поэтому время запуска моего веб-приложения очень важно.Иногда, когда пользователь запрашивает страницу, он должен все время ждать создания экземпляра моего веб-приложения, прежде чем получить ответ (это называется запросом на загрузку).

Некоторые страницы моего приложения не требуют аутентификации.Для этих страниц, если запрос является запросом на загрузку, я не хочу, чтобы пользователю приходилось ждать дополнительные ~ 1,5 секунды для создания экземпляра Spring Security.

Я уже выяснил, как лениво загружать все остальные компоненты моего приложения, Spring Security - единственное, чего я не знаю, как это сделать.У кого-нибудь есть идея?

Редактировать:Если кто-нибудь знает, как создать экземпляр Spring Security из кода вместо использования applicationContext-security.xml, тогда, я думаю, я мог бы выяснить, как его лениво загрузить.

Это было полезно?

Решение

Что ж, я наконец-то понял это.Мне пришлось создать подкласс org.springframework.web.context.ContextLoaderListener и org.springframework.web.filter.DelegatingFilterProxy ничего не делать, пока я не вызову для них метод activate.

Другие советы

Описанный взлом здесь сработало на меня:

...вы можете решить эту проблему с помощью любого LazyInitTargetSource для UserDetailsService.

<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 в web.xml чтобы соответствовать только защищенным ресурсам (а также страницам входа-выхода и другим ресурсам, для которых требуется обработка Spring Security), и оберните фильтр по умолчанию своей собственной ленивой оболочкой, как вы сделали с DispatcherServlet.

Редактировать: Проблема, похоже, сложнее, чем я думал.Вы также можете попытаться определить свой XML-файл безопасности как <beans default-lazy-init="true" ...>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top