【问题标题】:Session expired in spring MVC会话在春季 MVC 中过期
【发布时间】:2011-10-27 08:53:03
【问题描述】:

如何处理 Spring MVC 中过期的会话以及处理它的最佳位置是什么?我在哪里可以指定会话超时?如果你能举个例子给我看看就好了。

【问题讨论】:

    标签: java session spring-mvc session-timeout


    【解决方案1】:

    对于会话超时,我使用的是“普通”Servlet API。

    在 web.xml 和方法 sessionCreated 中定义的自定义 javax.servlet.http.HttpSessionListener 使用 setMaxInactiveInterval(在 [s] 中)设置超时。

    我知道这是“老派”,但很简单,适合我。

    如果你想从 spring 中获取超时值,可以从 session 中访问 ServletContext。

    ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
    applicationContext.getBean("...");   
    

    【讨论】:

    • Alephx,感谢您的回答。我想知道我应该在控制器类的哪个位置检查它。我应该编写一个单独的类或方法来处理它吗?检查会话的最佳方法是什么?
    • 我的回答是在应用代码中设置自己的会话超时。不确定您是否可以检查会话状态。会话由容器(Tomcat 等)管理 - 如果会话过期,它将使其无效。您只能检查会话是否有效。为此,您需要过滤器 [Servlet 方式] 或 Spring 拦截器 org.springframework.web.servlet.HandlerInterceptor [Spring MVC 方式]
    【解决方案2】:

    一种选择是使用event mechanism in ApplicationContext,然后您将在 web.xml 中注册一个 HttpSessionListener,当会话超时时,它会在根 WebApplicationContext 中向所有观察该事件的 bean 触发事件。使用 WebApplicationContextUtils 获取根 WebApplicationContext。

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 2011-06-21
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多