当前位置: 首页 > 面试题库 >

无状态服务器如何工作?

龚彬
2023-03-14
问题内容

我试图理解这一点。通常,每次用户登录系统时,服务器端都会创建一个会话,而用户客户端端则有cookie。当人们谈论无状态服务器端,有状态客户端时,它们是什么意思?服务器端无需使用会话保持跟踪用户?只在客户端使用Cookie来检查用户?意味着如果我更换服务器,用户将不会注意到它,仍然可以继续使用该服务?

如何配置spring-security来做到这一点?


问题答案:

对于真正的无状态服务器端,跨服务器跟踪用户非常棘手。在大多数情况下,事情都是无状态服务器,其中登录例外。但是,无状态服务器的重要之处在于它使群集非常简单,因此您可以水平扩展。

在Java中,您可以使用Cookie来存储凭据,也可以使用分布式哈希将其设置为无状态。通常,人们接受使用像memcache之类的东西,并说他们是无状态的,因为状态存储在Web服务器外部。这使用户可以使用服务器场中的任何Web服务器,并且仍然可以安全地进行身份验证。在Java中,我们有很多可与spring一起使用的分布式哈希实现,因此您不必使用memcache来执行此操作。

另一种选择是使用cookie来存储称为HMAC的加密安全散列票证。使用cookie避免使用Session,因此Web服务器是无状态的。使用HMAC,您可以签名不能由第三方伪造或创建的数据块,并且可以保证数据源于您。这不需要外部服务器资源(缓存)来对用户进行身份验证,因此可以更好地进行扩展,但是您需要注意一些安全问题。仅供参考,Google使用此技术水平缩放。一个HMAC不同于SHA1或其他Cyrpto哈希。他们需要一个密钥,该密钥必须位于服务器场中的每个服务器上。还必须使用对称加密密钥进行保护,以确保在有人获取文件的情况下将其安全地存储在服务器上。HMAC信息也以明文形式存储,因此当您可以将用户名或电子邮件放入cookie时,任何人都可以使用实际的加密哈希。如果有人要保留该cookie,则可以伪装成该用户。这就是为什么HMAC通常仅在一定时间内有效的原因。此后,它们就会过期,因此,如果有人找到了他们,他们将永远无法访问该帐户。

因此,HMAC具有此弱点,因此您应注意在其中使用哪些应用程序。使用PayPal方案对于Paypal来说确实是个坏主意,因为我要做的就是获取安全的Cookie,然后将所有资金转给我。最大的好处是,所有事情都是您的应用程序真正无状态的。

最后一个选择是将Java会话存储在分布式哈希中。php和其他平台会将其会话转储到数据库中,穷人则将其分发到缓存中,或者将其转储到内存缓存中。使用Java,您可以做同样的事情。您也可以将会话对象放入分布式缓存中。由于人们认为“很酷,现在我可以将我想要的任何内容转储到我的会话中,这将是无状态的”,因此该选项已不受欢迎。但是,与所有分布式缓存一样,链接速度,复制时间和有效负载大小也受到限制。Java或Memcache都是如此。保持较小的会话,这很好用。将所有内容投入会话中,您就可以直接解决单个服务器遇到的扩展问题。真的是

更新:以下是可用于执行此操作的Java分布式缓存库的列表:

http://www.manageability.org/blog/stuff/distributed-cache-
java



 类似资料:
  • 本文向大家介绍如何监控 Linux 服务器状态的方法,包括了如何监控 Linux 服务器状态的方法的使用技巧和注意事项,需要的朋友参考一下 Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。 本文介绍的几个命令,不仅仅适用于服务器监控,也适用于我们日常情况下的开发。 1. watch watch

  • 示例: state state 是另外一个元数据。 如果你在元数据中设置了state=inactive, 客户端将不能访问这些服务,即使这些服务是"活"着的。 你可以使用临时禁用一些服务,而不是杀掉它们, 这样就实现了服务的降级。 server. 你可以通过 rpcx-ui)来时实现禁用和启用的功能。 ```go server.go func main() { flag.Parse() go cr

  • 我想知道Heroku服务器状态,找不到任何关于这个主题的留档。 示例: 任何人都可以解释这个例子吗?在哪里可以找到资源以供将来参考?

  • 我试图实现jwt在cookie中的auth在一个单页应用程序的反应前端,它与运行Express的各种节点微服务通信。 我这样做,因为它似乎存储的jwt在sesionstore使应用程序容易受到XSS。 然而,通过使用cookie,API现在容易受到csrf攻击。 传统上,csrf攻击是通过创建csrf令牌,将其存储在服务器会话中,然后将其呈现在隐藏的表单字段中来减轻的。然后,在提交表单时,csrf

  • 我有一个REST服务,使用Java、Spring boot和Spring Security以及基本的访问认证构建。没有视图,没有JSP等,没有“登录”,只有可以从单独托管的React应用程序调用的无状态服务。 我已经阅读了各种关于CSRF保护的留档,但是我不能决定我应该使用Spring安全CSRF配置,还是仅仅禁用它?如果我禁用csrf保护,我可以使用我的基本权限像这样使用curl调用服务: 如果

  • 异常跟踪: “”java.lang.IllegalStateException:在org.apache.catalina.core.applicationDispatcher.doForward(applicationDispatcher.java:328)在org.apache.catalina.core.applicationDispatcher.doForward(applicationDi