REST和HttpSession对象
我知道REST不应该使用REST和HttpSession对象,rest,servlets,jax-rs,httpsession,Rest,Servlets,Jax Rs,Httpsession,我知道REST不应该使用HttpSession。 另一方面,REST服务在servlet容器中运行。 据我所见,只有在以下情况下才会创建HttpSession对象: HttpSession session = request.getSession(); 代码被执行。总是这样吗?除了使用JSP之外 我的问题是:在执行REST方法时是否会创建HttpSession对象 假设我使用JAX-RS框架,如果它能起到任何作用的话。 如果没有创建这样的对象,实际上可能意味着服务器内存的大小可能不会增长,而
HttpSession
。
另一方面,REST服务在servlet容器中运行。
据我所见,只有在以下情况下才会创建HttpSession
对象:
HttpSession session = request.getSession();
代码被执行。总是这样吗?除了使用JSP之外
我的问题是:在执行REST方法时是否会创建
HttpSession
对象
假设我使用JAX-RS框架,如果它能起到任何作用的话。
如果没有创建这样的对象,实际上可能意味着服务器内存的大小可能不会增长,而不管有多少客户机在服务器上使用它。HTTP会话实际上经常与REST接口一起使用,但不应该包含任何真正重要的内容。因此,它们可以用来包含您已经验证的事实,或者您首选的某些列表的默认顺序是什么;在前一种情况下,您还可以支持其他身份验证机制,同时允许完全无状态操作,在后一种情况下,您还可以轻松地支持显式覆盖。只要你不需要会话——好吧,假设你的站点为了讨论而使用了HTTP基本身份验证;如果您使用的是OAuth,那么您需要启用会话来阻止性能受损——那么您仍然有可能接近RESTful(在这方面是肯定的;REST毕竟不是“不使用会话”)
是否担心在超时之前一个会话会持续多长时间?也许吧,但不是真的。会话实际上是一个映射到某个数据库表中的对象,您可以在其上配置到期策略,使其持续足够长的时间,以支持有效使用,而不会负担过重。这取决于一次有多少客户端使用该站点,它们的使用模式是什么,以及您有哪些可用的硬件资源(当然)。我认为这是Java EE framework目前的局限性,我还没有看到它以其他方式使用任何其他服务器。如果需要管理容器
安全约束
将创建一个会话
也就是说,使用容器管理的身份验证不需要实现代码。人们自己实现身份验证/登录机制,比如Shiro等等
如果您担心可伸缩性,您可能必须自己处理身份验证。然而,在您继续使用此路径之前,请考虑以下…您希望有多少人使用您的应用程序?除非你是像Facebook或Google等非常大且受欢迎的服务,否则现有的硬件/云服务应该能够通过HTTP会话处理你的负载,并且有很大的空闲空间
但是,如果您想自己实现它,那么我建议如下:
WWW授权
最容易测试)Set Cookie
Cookie
发出未来请求您可以添加企业缓存来存储哪些缓存仍然有效,但需要额外的后端调用。感谢您的回复。可以在REST中访问Yes会话,如该示例中所示:公共字符串mysession(@Context HttpServletRequest req)。。。但如果我根本不知道要创建什么会话对象,我怎么能保证呢?我可以吗?