Question

Comment ne pas instancier printemps sécurité jusqu'à ce que je dois?

J'utilise Google App Engine de sorte que le temps de démarrage de mon application web est important. Parfois, lorsqu'un utilisateur demande une page, ils doivent attendre tout ce temps pour mon application web instancier avant d'obtenir une réponse (ce qui est appelé une demande de chargement).

Certaines pages de mon application ne nécessitent pas d'authentification. Pour ces pages, si la demande est une demande de chargement, je ne veux pas l'utilisateur d'avoir à attendre les supplémentaires ~ 1,5 seconde pour la sécurité du printemps à instancier.

Je l'ai déjà compris comment la charge paresseuse tous les autres composants de mon application, Spring Security est le seul que je ne sais pas comment. Quelqu'un at-il une idée?

EDIT: Si quelqu'un sait comment instancier Spring Security à partir du code au lieu d'utiliser applicationContext-security.xml, alors je pense que je pourrais comprendre comment charger paresseux il

.
Était-ce utile?

La solution

Eh bien, je enfin compris. Je devais sous-classe org.springframework.web.context.ContextLoaderListener et org.springframework.web.filter.DelegatingFilterProxy de ne rien faire jusqu'à ce que j'appelle une méthode d'activation sur eux.

Autres conseils

Le hack décrit a fonctionné pour moi:

... vous pouvez résoudre ce problème avec tout LazyInitTargetSource pour le 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>

Vous pouvez configurer <url-pattern>s de mappage du filtre de sécurité Spring dans web.xml pour correspondre aux ressources sécurisées uniquement (ainsi que les pages de login de fermeture de session et d'autres ressources qui nécessitent le traitement de sécurité du printemps), et envelopper le filtre par défaut avec votre propre emballage paresseux, comme vous l'avez fait avec DispatcherServlet.

EDIT: Le problème semble être plus complexe que ce que je pensais. Vous pouvez aussi définir votre xml de sécurité comme <beans default-lazy-init="true" ...>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top