我知道REST不应该使用HttpSession。另一方面,REST服务在servlet容器中运行。根据我所看到的,只有在以下情况下才会创建HttpSession对象:
HttpSession session = request.getSession(); 执行代码。一直都是这样吗?除了使用JSP?
我的问题是:在执行REST方法时,是否会创建HttpSession对象?
假设我使用JAX-RS框架,如果它能起作用的话。
如果没有创建这样的对象,实际上可能意味着服务器内存的大小可能不会增长,无论有多少客户端在服务器上使用它。
发布于 2012-01-02 11:07:03
HTTP会话实际上经常与REST接口一起使用,但不应该包含任何真正关键的内容。因此,它们可以用来包含已验证的事实或某些列表的首选默认排序;在前一种情况下,您还可以支持其他身份验证机制,同时允许完全无状态操作,而在后一种情况下,您还可以轻松地支持显式覆盖。只要你不需要会话-好吧,假设你的站点出于争论而使用HTTP BASIC auth;如果你正在使用OAuth,那么你需要启用会话来防止性能崩溃-那么你仍然有可能接近RESTful (在这一点上是肯定的;REST毕竟不是“不使用会话”)。
是否担心会话在超时之前会持续多长时间?嗯,也许吧,但不是真的。会话实际上是一个映射到某个数据库表中的对象,您可以在它们上配置过期策略,以便它们能够持续足够长的时间来支持有效使用,而不会造成负担过重。这取决于有多少客户端同时使用该站点,它们的使用模式是什么,以及您有哪些硬件资源可用(当然)。
发布于 2017-05-07 22:15:15
我认为这是Java EE框架的局限性,目前我还没有看到其他服务器这样做。如果您需要管理 security-constraint的容器,将创建一个会话。
也就是说,您不需要实现代码就可以使用容器管理的身份验证。人们确实自己实现了身份验证登录/机制,比如Shiro等等。
如果您担心可伸缩性,则可能需要自己处理身份验证。但是,在继续此过程之前,请考虑以下几点:您希望有多少人使用您的应用程序?除非你是一些像Facebook或Google等非常大和受欢迎的服务,否则现有的硬件/云产品应该能够处理HTTP Sessions的负载,并且有很大的空闲空间。
然而,如果你想自己实现它,那么我建议你这样做:
WWW-Authorization是最容易测试的),验证with)Set-CookieCookie发出未来请求您可以添加企业缓存来存储哪些缓存仍然有效,但需要额外的后端调用。
https://stackoverflow.com/questions/8695581
复制相似问题