Pergunta

Como não instancie a segurança da primavera até que eu precise?

Estou usando o Google App Engine para que o tempo de inicialização do meu aplicativo da web seja importante. Às vezes, quando um usuário solicita uma página, ele deve esperar o tempo todo para o meu aplicativo da web instanciar antes de obter uma resposta (isso é chamado de solicitação de carregamento).

Certas páginas do meu aplicativo não requerem autenticação. Para essas páginas, se a solicitação for uma solicitação de carregamento, não quero que o usuário precise esperar o extra de ~ 1,5 segundos para que a segurança da primavera instancie.

Eu já descobri como carregar todos os outros componentes do meu aplicativo, o Spring Security é o único que não sei. Alguém tem uma ideia?

EDIT: Se alguém souber como instanciar a segurança da primavera do código em vez de usar o ApplicationContext-security.xml, acho que poderia descobrir como carregá-lo preguiçoso.

Foi útil?

Solução

Bem, finalmente descobri. Eu tive que subclasse org.springframework.web.context.ContextLoaderListener e org.springframework.web.filter.DelegatingFilterProxy para não fazer nada até que eu chame um método de ativação neles.

Outras dicas

O hack descrito aqui trabalhou para mim:

... Você pode resolver esse problema com qualquer fonte LazyinittargetSour para o 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>

Você pode configurar <url-pattern>s de mapeamento de filtro de segurança da primavera em web.xml Para combinar apenas com os recursos seguros (bem como páginas de login-logout e outros recursos que exigem o processamento de segurança da primavera) e envolva o filtro padrão com seu próprio invólucro preguiçoso, como você fez com DispatcherServlet.

EDITAR:O problema parece ser mais complexo do que eu pensava. Você também pode tentar definir seu XML de segurança como <beans default-lazy-init="true" ...>

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top