Java:确保Web应用程序仅在一个浏览器选项卡中打开

Jos*_*mit 4 java session servlets servlet-filters

确保特定页面(假设单页Web应用程序)仅在一个浏览器选项卡中打开的最佳方法是什么?

假设Java Web应用程序具有身份验证,即用户必须登录(因此我们可以通过Java Session API识别哪个用户正在查看哪个页面).

目的是如果为同一个URL打开另一个选项卡,则用户将被重定向到静态页面,该页面告诉他应用程序在其他位置打开(另一个选项卡).

我目前的方法无法在同一浏览器中使用标签,因为JSESSIONID它存储在cookie中,可用于所有浏览器的标签.

Dam*_*ith 6

我假设您当前的用例是这样的:

  1. 用户打开浏览器选项卡,加载应用程序页面并登录.

然后,用户打开第二个浏览器选项卡,加载您的应用程序页面并已登录(因为浏览器对所有选项卡或窗口具有相同的会话cookie).

并且您希望限制用户,以便在他们加载第二个选项卡时,而是看到一条警告消息:您已在其他位置登录此站点,请使用该窗口,或者如果您不再打开该窗口,请单击在这里注销并重新登录.

大多数解决方案将涉及为应用程序实例和会话保留一次性令牌.如果您的应用程序在单个页面中加载并向用户显示登录框,那么当用户登录时您可以发送一次性令牌,将其存储在javascript变量中并将其与所有服务器请求一起发送.如果用户然后在新选项卡中加载应用程序,他们会请求他们的初始数据,并且服务器可以生成响应,表明令牌不存在,他们需要注销,关闭窗口或切换到已登录的窗口.

因此,答案是,您希望在服务器上的会话中存储随机字符串,在登录时将其提供给用户,并检查每个请求是否有它,否则将它们退回到注销页面.并且在Web客户端的javascript中,存储该令牌并将其与每个请求一起发送到服务器.