【问题标题】:How Application Servers recognize users with Stateful beans应用服务器如何识别有状态 bean 的用户
【发布时间】:2015-05-23 02:03:05
【问题描述】:

我对 Stateful bean 的工作原理、bean 中的钝化和激活状态了解一些,但我不确定它是如何工作的..

我向 HttpServlet 实例发送一个简单的 HTTP 请求。我的简单应用程序中没有身份验证或授权服务。应用服务器启动一个线程来处理我的请求。比为这个请求创建一个有状态的bean来做一些事情,这个处理请求的thead应该被杀死。

一分钟后,我再次发送请求(无缓存模式),并委托同一个有状态 bean 来处理我的请求。我想知道 APPLICATION SERVER 如何识别我?

也许这是因为浏览器? HTTP 协议具有“连接保持活动”模式。 Application Server 认出我是因为浏览器打开了多连接 TCP 处理程序并且 Application Server 与浏览器有会话?

请解释一下,当没有身份验证或授权服务并且我们使用无状态的 HttpServlet 时,AS 如何识别用户。

【问题讨论】:

    标签: java jakarta-ee jboss ejb


    【解决方案1】:

    Java Servlet 容器为每个用户维护一个“会话”,即使不涉及身份验证服务。一般而言,HTTP 请求通过 cookie 或通过 URL 重写与正确的会话相关联——后者通常意味着客户端回显给服务器的查询参数或 REST 样式的请求 URI 提供了会话标识符。在安全(即 HTTPS)服务中,请求也可以通过 SSL 上下文与会话相关联。

    您的有状态 bean 很可能与用户会话相关联,而不是与用户自己的标识符相关联。除其他事项外,请注意,这意味着即使有用户身份验证服务,同一用户也可能同时具有来自同一客户端计算机或不同客户端计算机的多个不同的活动会话。

    【讨论】:

    • 谢谢。因此,即使没有身份验证服务,AS 也会因为“会话”而认出我。但在此连接中没有任何可见的 cookie。 Servlet Container 是如何知道我的?
    • HTTP requests are associated with the correct session either via cookies **or via URL rewriting** 表示 sessionid 可以作为 URL 参数添加,而不是使用 cookie。
    【解决方案2】:

    在浏览器中,您可以看到 JSESSIONID 为 cookie,用于跟踪用户会话。 有关更多详细信息,请谷歌 JSESSIONID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多