首页 > 解决方案 > 在spring mvc中处理同一浏览器中的不同用户会话

问题描述

我有一个 spring mvc 应用程序,管理员可以在其中创建和更新用户信息,并在同一个浏览器中打开他们各自的用户窗口。但是,当管理员在一个选项卡中打开一个用户会话,然后尝试在另一个选项卡中打开另一个用户会话时,它会给出错误,指出一个活动会话已经存在。我们如何使管理员能够在同一个浏览器和不同的选项卡中与不同的用户一起玩他们各自的会话?有什么方法可以处理这些会话

标签: springspring-bootmodel-view-controllerspring-securitysession-cookies

解决方案


我认为当用户打开会话网络应用程序时,例如为窗口对象提供一些 id 活动浏览器选项卡$window.name = "cliendId"

当用户登录时,您的 Spring 应用程序会通过 Web 发送此窗口 ID,并使用 Spring Security 进行处理

public class CustomWebAuthenticationDetails extends WebAuthenticationDetails {

    private final Logger log = LoggerFactory.getLogger(CustomWebAuthenticationDetails.class);

    private final String clientid;

    CustomWebAuthenticationDetails(final HttpServletRequest request) {
        super(request);
        clientid = request.getHeader("clientid");

        log.debug("User Agent {}", request.getHeader("User-Agent"));
    }

    public String getClientid() {
        return clientid;
    }

}

并配置

@Component
public class CustomWebAuthenticationDetailsSource implements AuthenticationDetailsSource<HttpServletRequest, WebAuthenticationDetails> {
    @Override
    public WebAuthenticationDetails buildDetails(final HttpServletRequest context) {
        return new CustomWebAuthenticationDetails(context);
    }
}

现在按用户管理或列出此会话 ID,当用户打开新会话时,相同的选项卡警报或终止会话,并编写自己的安全过滤器并实施安全过滤器链管理每个请求


推荐阅读