我正在阅读Pro Spring MVC一书中的Spring Web Flow一章。不幸的是,没有明确的信息,流程执行期间的状态是持久的。我假设它保存在JVM堆中并与会话相关联。
现在HTTP是一个无状态协议(REST ...),我想在不保存服务器状态的情况下使用Spring Web Flow(除了可以对会话进行身份验证的唯一状态)。
一种策略是使用流的每个HTTP请求(隐藏输入)发送整个流的所有参数,从而累积所有必要的参数,直到流完成为止。
通过已经验证的参数签名,可以避免重新验证参数的开销。
您知道吗,是否有可能以这种方式使用Spring Web Flow?有人已经这样做了吗?
更新:为什么?
持久状态不仅违反了作为无状态协议的HTTP原则,而且还存在实际问题:
我还没有看过Web Flow的细节,但我相信一个人可以拥有相同的编程经验,并且仍然将所有信息保存在请求参数中。
更新:我现在已经了解到我所请求的流处理方式有一个名称:Continuations。术语延续在函数式编程中更常见,但将这个想法适应HTTP交互显然并不罕见。
答案 0 :(得分:0)
您可能有兴趣检查我的bean flow FSM项目(restflow): https://github.com/alfonso-presa/restflow
虽然它不使用Spring WebFlow,但我认为这可能有助于回答问题的精神,因为它允许实现无状态服务器协调流程。我开始这个项目是因为我希望使用Spring WebFlow几乎和你一样,但我发现它不可能因为状态存储在会话中(并且还没有内置REST / json序列化)。
它的主要目的是创建一个状态机(就像WebFlow一样),但它的状态存储在bean中,你可以在分布式存储中持久存储,或者轻松签名或加密并发送回客户端作为下一次请求。
我希望你觉得它很有用。
编辑:我在这里创建了一个展示项目:https://github.com/alfonso-presa/restflow-spring-web-sample