首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST和HttpSession对象

REST和HttpSession对象
EN

Stack Overflow用户
提问于 2012-01-02 05:12:33
回答 2查看 3.6K关注 0票数 5

我知道REST不应该使用HttpSession。另一方面,REST服务在servlet容器中运行。根据我所看到的,只有在以下情况下才会创建HttpSession对象:

代码语言:javascript
复制
HttpSession session = request.getSession(); 

执行代码。一直都是这样吗?除了使用JSP?

我的问题是:在执行REST方法时,是否会创建HttpSession对象?

假设我使用JAX-RS框架,如果它能起作用的话。

如果没有创建这样的对象,实际上可能意味着服务器内存的大小可能不会增长,无论有多少客户端在服务器上使用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-02 11:07:03

HTTP会话实际上经常与REST接口一起使用,但不应该包含任何真正关键的内容。因此,它们可以用来包含已验证的事实或某些列表的首选默认排序;在前一种情况下,您还可以支持其他身份验证机制,同时允许完全无状态操作,而在后一种情况下,您还可以轻松地支持显式覆盖。只要你不需要会话-好吧,假设你的站点出于争论而使用HTTP BASIC auth;如果你正在使用OAuth,那么你需要启用会话来防止性能崩溃-那么你仍然有可能接近RESTful (在这一点上是肯定的;REST毕竟不是“不使用会话”)。

是否担心会话在超时之前会持续多长时间?嗯,也许吧,但不是真的。会话实际上是一个映射到某个数据库表中的对象,您可以在它们上配置过期策略,以便它们能够持续足够长的时间来支持有效使用,而不会造成负担过重。这取决于有多少客户端同时使用该站点,它们的使用模式是什么,以及您有哪些硬件资源可用(当然)。

票数 2
EN

Stack Overflow用户

发布于 2017-05-07 22:15:15

我认为这是Java EE框架的局限性,目前我还没有看到其他服务器这样做。如果您需要管理 security-constraint容器,将创建一个会话。

也就是说,您不需要实现代码就可以使用容器管理的身份验证。人们确实自己实现了身份验证登录/机制,比如Shiro等等。

如果您担心可伸缩性,则可能需要自己处理身份验证。但是,在继续此过程之前,请考虑以下几点:您希望有多少人使用您的应用程序?除非你是一些像Facebook或Google等非常大和受欢迎的服务,否则现有的硬件/云产品应该能够处理HTTP Sessions的负载,并且有很大的空闲空间。

然而,如果你想自己实现它,那么我建议你这样做:

  1. unauthenticated客户端传递凭证(通过WWW-Authorization是最容易测试的),验证with)
  2. credentials并返回令牌。令牌是一个经过编码的加密字符串,其中包含客户端ID、过期和重新验证令牌。此令牌通过Set-Cookie
  3. Client传回客户端,并使用包含令牌的Cookie发出未来请求
  4. 只要令牌未过期,就可以使用该令牌,这将只是服务器节点上的加密计算,因此如果需要,可以跨多个服务器进行扩展没有单个数据存储需要处理。
  5. 重新验证令牌可用于在客户端过期时为其生成新令牌(这对于交互可以持续几分钟的用户应用程序很有用)。

您可以添加企业缓存来存储哪些缓存仍然有效,但需要额外的后端调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8695581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档