您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我如何执行经过身份验证的AJAX请求,而不重置Tomcat的会话超时?

我如何执行经过身份验证的AJAX请求,而不重置Tomcat的会话超时?

我将使用Grails过滤器,该过滤器的功能类似于The-MeLLeR所建议的,而不会在所有会话中造成不必要的循环:

class AjaxTimeoutFilters {

   int sessionTimeout = 30 * 60 * 1000
   private static final String TIMEOUT_KEY = 'TIMEOUT_KEY'

   def filters = {
      all(controller:'*', action:'*') {
         before = {
            if (request.xhr) {
               Long lastAccess = session[TIMEOUT_KEY]
               if (lastAccess == null) {
                  // TODO
                  return false
               }
               if (System.currentTimeMillis() - lastAccess > sessionTimeout) {
                  session.invalidate()
                  // TODO - render response to trigger client redirect
                  return false
               }
            }
            else {
               session[TIMEOUT_KEY] = System.currentTimeMillis()
            }

            true
         }
      }
   }
}

会话超时应注入依赖项,否则应与web.xml中的值保持同步。

剩下两个问题。一种情况是有一个Ajax请求,但是没有以前的非Ajax请求(lastAccess == null)。另一个是如何将浏览器重定向登录页面,或者在30分钟无非Ajax活动后有Ajax请求时您需要去的地方。您必须呈现JSON或客户端会检查的其他响应,以知道它已超时并执行客户端重定向

其他 2022/1/1 18:14:54 有657人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶