Java 如何跨多台服务器管理用户会话?

Java 如何跨多台服务器管理用户会话?,java,session,authentication,jwt,Java,Session,Authentication,Jwt,我有一个对用户进行身份验证的web服务,如果成功,会给他们一个JSON web令牌,他们可以使用它来持久化会话。 目前我只有一台服务器,但出于性能考虑,我希望将其增加到两台或更多,但我不确定这将如何与不同的服务器配合使用,因为它们将有不同的实例来维护当前登录的用户 例如,我的服务将检查客户端返回的JWT,并且(假设它是一个好的令牌),将获取用户ID和会话,并检查是否有用户使用该会话ID登录。 但是,例如,如果web服务层之前的中间件确定用户最初登录的服务器当前不可用,并将请求路由到web服务的其

我有一个对用户进行身份验证的web服务,如果成功,会给他们一个JSON web令牌,他们可以使用它来持久化会话。
目前我只有一台服务器,但出于性能考虑,我希望将其增加到两台或更多,但我不确定这将如何与不同的服务器配合使用,因为它们将有不同的实例来维护当前登录的用户

例如,我的服务将检查客户端返回的JWT,并且(假设它是一个好的令牌),将获取用户ID和会话,并检查是否有用户使用该会话ID登录。
但是,例如,如果web服务层之前的中间件确定用户最初登录的服务器当前不可用,并将请求路由到web服务的其他服务器实例,那么身份验证控制器将如何评估请求是否有效

下面可以找到我的服务的一个非常基本的版本,黑色箭头表示普通通信,红色箭头表示第一层决定将请求路由到实例二时的通信。 从本质上讲,第一层是非常基本的,除了根据第二层实例的可用性将流量路由到下一层之外,实际上什么都不做


JWT的主要优点之一是它不需要服务器存储,因为它是自包含和无状态的。如果您需要服务器会话,那么JWT可能不是管理身份验证的最佳选择。看

当前,应用程序服务器使用会话ID来管理负载平衡和重定向到存储用户会话的服务器,包括会话的持久存储和迁移。使用JWT,您不会从这些特性中获利

如果需要具有身份验证的REST无状态端点,或者需要在各方之间安全地交换数据,请使用JWT