Как мне лениво загрузить Spring Security? - PullRequest
1 голос
/ 25 января 2010

Как мне не создавать экземпляры Spring Security, пока мне это не нужно?

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

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

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

РЕДАКТИРОВАТЬ: Если кто-нибудь знает, как создать экземпляр Spring Security из кода вместо использования applicationContext-security.xml, то я думаю, что я мог бы выяснить, как его лениво загрузить.

Ответы [ 3 ]

1 голос
/ 26 января 2010

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

1 голос
/ 12 мая 2011

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

... вы можете решить эту проблему с помощью любого 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>
0 голосов
/ 25 января 2010

Вы можете настроить <url-pattern> s сопоставления фильтра Spring Security в web.xml, чтобы соответствовать только защищенным ресурсам (а также страницам входа в систему и другим ресурсам, требующим обработки Spring Security), и обернуть фильтр по умолчанию с помощью Ваша собственная ленивая оболочка, как вы сделали с DispatcherServlet.

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

...