提问者:小点点

用于微服务的HttpSession


我知道基于令牌的身份验证广泛用于微服务,尤其是在水平扩容时。

对于微服务,我们可以通过将会话存储在数据库中来使用会话吗?一系列请求将是:

  • 第一个请求,创建HTTPsession并将会话ID与唯一用户名一起存储在数据库表中。
  • 第二个请求使用此会话ID发送,任何微服务实例都可以服务于此请求。服务器必须使用数据库记录的会话和用户验证此会话和用户。如果数据库中存在sesssionid用户名组合并且session sionid是有效的,则将请求提供给else重定向到登录页面。
  • 单击注销时,会话无效,db记录也被删除。

这对微服务来说不是一个很好的会话管理吗?微服务总是必须是无状态的吗?


共1个答案

匿名用户

基于令牌的身份验证用于微服务的原因是为了避免必须在服务之间共享会话状态。

如果您特别提到javax. servlet.http.HttpSession对象的实现,这通常是一个服务器(服务)的本地实现,并且需要一些自定义代码来根据提供的会话ID重新加载它,如果可能的话,在您的特定运行时(不知道您使用的是什么软件)。

我不明白你的建议为什么不可能,但我会仔细考虑这是否是一个绝对的要求。可能有其他更简单的方法来实现你想要的。

一种方法是在登录时发出一个令牌(JWT想到),让其他服务简单地验证这个令牌并从中提取用户数据。这样,在第一次登录后,身份验证就不需要查找用户数据了。

如果您需要共享状态,我建议寻找一些现有软件来处理会话存储。例如,我看到Redis有一个会话管理解决方案。

你也可以看看这个问题的答案