Domanda

Come faccio a non istanziare Primavera di sicurezza fino a quando ho bisogno di?

sto usando Google App Engine in modo che il tempo di avvio della mia web app è importante. A volte, quando un utente richiede una pagina, devono attendere tutto il tempo per la mia web app instantiate prima di ottenere una risposta (si parla di una richiesta di carico).

Alcune pagine della mia app non richiedono l'autenticazione. Per queste pagine, se la richiesta è una richiesta di carico, non voglio che l'utente di dover aspettare l'extra ~ 1,5 secondi per la primavera Security istanziare.

Ho già capito come carico pigri tutti gli altri componenti della mia app, Primavera di sicurezza è l'unico che non so come. Qualcuno ha un'idea?

EDIT: Se qualcuno sa come creare un'istanza Primavera di sicurezza dal codice invece di utilizzare applicationContext-security.xml, quindi credo che avrei potuto capire come carico pigro

.
È stato utile?

Soluzione

Bene, ho finalmente capito. Ho dovuto sottoclasse org.springframework.web.context.ContextLoaderListener e org.springframework.web.filter.DelegatingFilterProxy di non fare nulla fino a quando io chiamo un metodo Activate su di loro.

Altri suggerimenti

L'hack descritto qui funzionato per me:

... si può risolvere questo problema con qualsiasi LazyInitTargetSource per l'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>

È possibile configurare <url-pattern>s di mappatura del filtro Primavera di sicurezza in web.xml per abbinare le risorse protette solo (così come le pagine di login-Logout e altre risorse che richiedono l'elaborazione Primavera di sicurezza), e avvolgere il filtro predefinito con il proprio involucro pigro, come avete fatto con DispatcherServlet.

Modifica Il problema sembra essere più complessa di quanto pensassi. Si può anche provare a definire il xml di sicurezza come <beans default-lazy-init="true" ...>

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top