我有一个讨厌的错误:打开两个带有登录页面的选项卡,然后在每个选项卡中使用不同的用户登录。来自登录的第一个选项卡的所有请求返回“unauthorized”错误。 前端使用会话cookie,第二次成功登录第二个选项卡时,该cookie似乎被覆盖,并且在第一个选项卡中浏览时尝试使用此新cookie。
使用Spring Boot 1.5.8,Spring会话2,AngularJS 1.7.2 配置非常标准,所以我不认为这些样板文件会有用。
UPD: 当用户登录但会话不正确时,我寻求某种方法来防止这种情况。阻止此浏览器中的第二次登录尝试,或者在另一个用户登录同一浏览器时踢踢已登录的用户-所有操作都可以。
如果您在本地存储上设置了某种令牌,如下面的代码(在服务器的成功完整登录响应中),则可以从其他选项卡注销用户
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); } });