smw*_*dia 2 session spring spring-mvc session-state stateless
无状态 Web 应用程序似乎很有前途。如何制作一个?尤其是 Spring WebMvc?有什么指导方针吗?
以下是我的一些想法:
添加 1
我认为这不是是否保留状态信息的问题。如果你想做一些有用的事情,状态信息总是必要的。这实际上是一个在哪里/如何保留状态信息的问题。这篇文章很有用。它提到了进程内/进程外会话、数据缓存以及为什么不使用会话。
有关的:
使用 Spring MVC 进行无状态 Web 应用程序开发 (尚未响应)
http://brockallen.com/2012/04/07/think-twice-about-using-session-state/
这里有一些贡献。我不熟悉 Java 和 Spring,但我相信无论您的技术堆栈如何,这些指南都是有效的。
正如您在问题中所预期的那样,避免使用会话来验证用户。会话是强制性的,很难在分布式、可扩展的基础设施中一致地复制它。
此外,负载平衡器不适用于会话:请参阅负载平衡服务器上的会话状态超时问题。
无状态应用最好使用基于令牌的身份验证系统。Firebase就是一个很好的例子。将从令牌中提取的不可变用户 ID 映射到您要使用的任何存储机制中持久化的用户数据。由于此用户 ID 不会更改,因此您可以在分布式数据库中使用。
有时人们认为,通过将用户 ID 映射到数据库中的用户数据,您正在制作一个有状态的应用程序。这不是真的。让我说清楚:
将用户信息保存在数据库中并对经过身份验证的用户进行动态响应的应用程序不是必需的。无状态意味着应用程序不必跨多个服务器分发可变身份验证会话,也不会根据会话数据将其内部状态更改为特定客户端。
无状态的技巧是:一旦用户通过登录验证了它的令牌,服务器就不必在数据库服务器之间分发任何新的东西,它也不会将其状态更改为该客户端。它可以从令牌中提取用户信息并执行响应请求所需的操作。如果令牌过期,客户端将需要新的身份验证,这将生成一个新的令牌,但这与应用服务器隔离,因为用户 ID 将保持不变。
如果在 cookie 中缓存一些经常请求的数据会提高性能,那很好,继续缓存。只需确保 cookie 未连接到任何服务器状态,如果客户端丢失 cookie,您的应用程序不会中断。
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |