Spring HttpSession:取消阻塞sessionDestroyed

时间:2019-05-27 16:26:35

标签: spring httpsession

我想在会话管理方面考虑以下问题。用户可以访问应用程序中的一些功能。但是其中一些只能同时由一个用户访问。为简化起见,我在数据库表中存储哪些功能被哪个用户阻止。当用户注销,关闭浏览器等时,应用程序应调用数据库查询以释放资源。它与会话管理主题相关,这对我来说是新的,我碰到了几件事。

首先,我的应用程序欢迎URL是/ application / start。我已经定义了一个控制器:

@RequestMapping("/application/start")
public String applicationStart() { 
    return "forward:/start.html";
}

我注意到在应用程序启动时(甚至在记录之前),该请求被调用了3次。当我将其替换为

@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/application/start").setViewName("/start.html");
    }

它仅被调用一次-登录后(“ / application / login”)。此外,在第一种情况下,创建了三个会话-我创建了HttpSessionListenerImpl类,该类实现了HttpSessionListener进行跟踪。

我想了解的第二件事是会话到期和无效之间的区别。据我了解,该会话到期,例如。一段时间没有用户活动或注销操作时。但是我不完全理解第二个概念何时会发生?我观察到的是,当用户注销时,在sessionDestroyed事件内,SecurityContext正在存储用户的Authenticaiton对象。但是,当达到先前在sessionCreated中设置的maxInactiveInterval中的会话被破坏(无效?)时,Authentication对象等于null。我相信我读过某个地方Authentication不应为null。那么这是预期的行为吗?是否应该创建匿名身份验证? 我的想法是调用上述数据库查询,以解除基于sessionDestroyed对象的Authentication内部用户阻止的所有功能。但是在这种情况下,它将无法正常工作。

很抱歉,发布了较长的帖子,感谢您的提前帮助。

0 个答案:

没有答案