在Spring MVC中在同一浏览器中处理不同的用户会话

时间:2019-10-21 06:45:42

标签: spring spring-boot model-view-controller spring-security session-cookies

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

1 个答案:

答案 0 :(得分:0)

我认为当用户打开会话Web应用程序时,为窗口对象提供一些ID活动浏览器标签,例如$window.name = "cliendId"

和您的Spring应用程序(当用户登录时)通过Web发送此窗口ID并使用Spring安全性进行处理

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,并且当用户打开新会话时,同一选项卡警报或使用编写自己的安全过滤器杀死会话并实施安全过滤器链来管理每个请求