html淘宝店铺网站模板,网站付款链接怎么做,网站备案之前需要建好网站吗,茂名网站建设教REST #xff0c; 会话 ..等待。 REST应用程序中没有会话#xff0c;对吗#xff1f; 好吧#xff0c;那是真的。 如果我们可以避免会议#xff0c;我们应该这样做。 REST是无状态的 。 有关无状态性的主要问题是身份验证。 在通常的Web应用程序中#xff0c;我们习惯于在… REST 会话 ..等待。 REST应用程序中没有会话对吗 好吧那是真的。 如果我们可以避免会议我们应该这样做。 REST是无状态的 。 有关无状态性的主要问题是身份验证。 在通常的Web应用程序中我们习惯于在身份验证后将用户数据存储在会话中。 如果我们不想使用会话该如何解决 我们应该验证每个请求 。 因此我们可以扩展应用程序添加新节点删除节点而无需考虑会话复制以及消耗的Java堆内存。 最近我一直在从事高负载REST应用程序。 实际上我们并不期望在那里有很高的流量但是令人惊讶的是我们已经为我们准备了更高的流量这就是所谓的“快乐问题”。 应用程序基于Spring框架 并通过部署在Apache Tomcat 7上的Spring Security进行保护。 所有资源都是完全无状态的–我的任何代码都没有触及HttpSession。 不幸的是直到以下时间为止用过的Java堆空间一直在增加 java.lang.OutOfMemoryError: Java heap space 被扔了。 为了分析Java堆转储和堆的运行时使用情况我使用了VisualVM 。 堆转储分析显示 Tomcat使用的ConcurrentHashMaps占用了很大一部分内存来存储会话。 这些会话对象几乎是空的但是它们太多了以至于它们消耗了约50的保留Java堆空间。 向Tomcat启动脚本中添加参数 -XX:HeapDumpOnOutOfMemoryError以在java.lang.OutOfMemoryError: Java heap space上获取Java堆转储 我要做的第一件事是将web.xml会话超时从默认的30分钟限制为1分钟可能的最低选择 ?xml version1.0 encodingUTF-8?
web-app xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0!-- ... --session-configsession-timeout1/session-timeout/session-config
/web-app 那解决了问题– GC清理了堆结果更好并且不再抛出OutOfMemoryError。 但是更重要的是这些会议来自何处 答案是Spring Security。 默认情况下Spring Security根据需要创建会话-这意味着如果用户已成功通过身份验证则将创建会话。 就我而言它意味着–总是如此。 为了防止Spring Security创建会话需要将create-sessionnever添加到http http create-sessionnever!-- ... --
/http 您可能会认为–空的会话对象应该不是问题。 我可以告诉您对于每秒处理数百个请求的应用程序来说它确实是一个改变。 尤其是当它不在云中运行或只有很少的GB或RAM专用于Java堆时。 经过这些修改后Java堆的用法如下所示 参考在软件开发之旅博客上我们的JCG合作伙伴 Maciej Walkowiak 解决了REST Spring Security会话问题 。 翻译自: https://www.javacodegeeks.com/2012/07/rest-spring-security-session-problem.html