Question

Comment injecter des dépendances dans HttpSessionListener, avec Spring et sans appel, comme context.getBean("foo-bar")?

Était-ce utile?

La solution

Depuis la ServletContext Servlet 3.0 a une méthode « addListener », au lieu d'ajouter votre écouteur dans votre fichier web.xml vous pouvez ajouter dans le code comme ceci:

@Component
public class MyHttpSessionListener implements javax.servlet.http.HttpSessionListener, ApplicationContextAware {

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (applicationContext instanceof WebApplicationContext) {
            ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
        } else {
            //Either throw an exception or fail gracefully, up to you
            throw new RuntimeException("Must be inside a web application context");
        }
    }           
}

ce qui signifie que vous pouvez injecter normalement dans le « MyHttpSessionListener » et avec cela, il suffit de la présence de la fève dans votre contexte d'application provoquerez l'auditeur à être enregistré avec le conteneur

Autres conseils

Vous pouvez déclarer votre HttpSessionListener comme un haricot dans un contexte de printemps, et enregistrer un proxy de délégation comme auditeur réelle web.xml, quelque chose comme ceci:

public class DelegationListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        ApplicationContext context = 
            WebApplicationContextUtils.getWebApplicationContext(
                se.getSession().getServletContext()
            );

        HttpSessionListener target = 
            context.getBean("myListener", HttpSessionListener.class);
        target.sessionCreated(se);
    }

    ...
}

Avec 4,0 Spring, mais fonctionne également avec 3, je mis en œuvre l'exemple détaillé ci-dessous, en écoutant ApplicationListener<InteractiveAuthenticationSuccessEvent> et injecter le href="https://stackoverflow.com/a/19795352/2213375"> https HttpSession

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