阻止浏览器标签之间的会话共享

时间:2018-11-26 07:30:37

标签: angularjs spring cookies spring-security spring-session

我有一个讨厌的错误:打开两个带有登录页面的选项卡,并在每个选项卡中以不同的用户身份登录。来自第一个选项卡的所有登录请求均返回“未经授权”错误。 前端使用SESSION cookie,并且看起来该cookie被第二个选项卡的第二次成功登录所覆盖,并且在第一个选项卡中浏览时尝试使用此新cookie。

使用Spring Boot 1.5.8,Spring-session 2,AngularJS 1.7.2 配置是非常标准的,所以我认为这些样板没有用。

直到现在,我一直尝试在身份验证之前可以在后端工作的过滤器上设置过滤器,以某种方式过滤掉已知cookie的请求,但是我失败了。

UPD: 我寻求某种防止用户登录但会话不正确的情况的方法。阻止在此浏览器中进行第二次登录尝试,或者在另一个浏览器登录同一浏览器时踢出已登录的用户-所有操作都可以。

1 个答案:

答案 0 :(得分:1)

如果您在本地存储设备上设置了某种令牌,例如下面的代码(在服务器的完整登录响应中),则可以从其他选项卡中注销用户

 localStorage.setItem('logout', 'logout-' + Math.random());

,并在您的主应用程序模块中将此功能作为运行块:

 function logoutFromOtherTabs(authService, $timeout) {
        'ngInject';

        window.addEventListener('storage', function (event) {
            if (event.key === 'logout') {
                $timeout(function () {
                    authService.logout();
                }, 1000);
            }
        });