Pregunta

¿Cómo no instantiate primavera de Seguridad hasta que necesito?

Estoy usando Google App Engine por lo que el tiempo de inicio de mi aplicación web es importante. A veces, cuando un usuario solicita una página, deben esperar todo el tiempo para mi aplicación web instantiate antes de recibir una respuesta (esto se llama una solicitud de carga).

Algunas páginas de mi aplicación no requieren autenticación. Por estas páginas, si la solicitud es una solicitud de carga, no quiero que el usuario tenga que esperar el extra ~ 1,5 segundos para la primavera de Seguridad para crear una instancia.

Ya he descubierto la manera de carga perezosa todos los otros componentes de mi aplicación, Spring Security es el único que no sé cómo. Alguien tiene una idea?

EDIT: Si alguien sabe cómo crear una instancia de la primavera de Seguridad de código en lugar de utilizar applicationContext-security.xml, entonces yo creo que pudiera encontrar la manera de carga perezosa que

.
¿Fue útil?

Solución

Bueno, finalmente lo descubrió. Tenía que org.springframework.web.context.ContextLoaderListener subclase y org.springframework.web.filter.DelegatingFilterProxy a no hacer nada hasta que yo llamo un método Activate en ellos.

Otros consejos

El truco describe aquí trabajó para mí:

... que puede resolver este problema con cualquier LazyInitTargetSource para la 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>

Se puede configurar <url-pattern>s de asignación del filtro de seguridad Primavera en web.xml para que coincida con los recursos garantizados solamente (así como las páginas de inicio de sesión, cierre de sesión y otros recursos que requieren el procesamiento de la primavera de Seguridad), y envolver el filtro por defecto con su propio envoltorio perezoso, como lo hizo con DispatcherServlet.

EDIT: El problema parece ser más complejo de lo que pensaba. También puede tratar de definir su seguridad xml como <beans default-lazy-init="true" ...>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top