gpt4 book ai didi

java - Google Guice Web 应用程序中的 HttpSessionListener

转载 作者:行者123 更新时间:2023-12-02 09:21:25 26 4
gpt4 key购买 nike

我需要执行一个操作,该操作将访问 ServletContext 中的项目,当 Guice Servlet session 过期时。 (为什么?要通过打开的 Websocket 连接来销毁 session 并关闭它们;这些连接保留在 ServletContext 中。)

要在基本 Servlet Web 应用程序中实现这一目标,需要实现 HttpSessionListener并 Hook 到 sessionDestroyed 方法。

对于使用 Google Guice 的 Web 应用程序如何实现这一目标用于依赖注入(inject)?

回想一下能够访问 ServletContext 的要求;我已经遇到过this forum conversation ,但没有发现它有多大帮助。

最佳答案

没有“Guice 方式”来添加 session 监听器。可悲的是。但是从 session 监听器访问 servlet 上下文没有问题。

注册 session 监听器:

public class MyServletConfig extends GuiceServletContextListener {
private Injector injector;

@Override
public void contextInitialized(final ServletContextEvent servletContextEvent) {
injector = Guice.createInjector(new MyAppModule());

registerSessionListeners(servletContextEvent.getServletContext(), injector);

super.contextInitialized(servletContextEvent);
}

private void registerSessionListeners(final ServletContext servletContext, final Injector injector) {
servletContext.addListener(injector.getInstance(WebsocketCloser.class));
}

@Override
protected Injector getInjector() {
return injector;
}

}

访问servlet上下文是 session 监听器:

public class WebsocketCloser implements HttpSessionListener {
@Override
public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
// no-op
}

@Override
public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
// do cleanup: httpSessionEvent.getSession().getServletContext();
}
}

关于java - Google Guice Web 应用程序中的 HttpSessionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com