看来我必须找到一种不同的方法来将会话令牌从 Flex 客户端传输到 Struts 后端而不使用 cookie。
如果我将会话令牌放入请求的有效负载中,我必须在什么时候自定义 Struts 的行为,以便我可以尽可能多地重用现有的会话处理?特别是,我不想重新实现任何安全措施(例如将令牌绑定到 IP)和配置参数(例如会话到期间隔)。
有一个 CreateSession 拦截器,在默认堆栈的早期,我应该用子类版本交换它吗?
看来我必须找到一种不同的方法来将会话令牌从 Flex 客户端传输到 Struts 后端而不使用 cookie。
如果我将会话令牌放入请求的有效负载中,我必须在什么时候自定义 Struts 的行为,以便我可以尽可能多地重用现有的会话处理?特别是,我不想重新实现任何安全措施(例如将令牌绑定到 IP)和配置参数(例如会话到期间隔)。
有一个 CreateSession 拦截器,在默认堆栈的早期,我应该用子类版本交换它吗?
我对 Flex 不是很有经验,但因为这看起来很有趣,而且我不希望看到问题得不到解答,所以我想我会尝试一下。据我了解,Flex 会话 (HttpFlexSession) 和 HttpSession 是完全独立的实体。也就是说,您应该能够在它们之间共享数据。
Steven Webster 和 Alistair McLeod 所著的“使用 Macromedia Flex 开发富客户端”一书中有一个非常相关的免费章节(第 20 章:Flex 与 J2EE 集成)。
我现在将大量引用该免费章节!特别注意:
维持状态
在理解上最大的飞跃是不再需要 HTTP 会话状态。尽管富客户端和服务器之间的请求最终是通过 HTTP 发出的,但 HTTP 已被简化为一种传输技术,而不是我们需要与之集成的技术。J2EE 开发人员对在 HTTP 请求和响应对象中放置属性和参数以及通过在 HTTP 会话中存储对象来维护状态的概念感到满意。...
... Flex 实际上可以提供对 HTTP 会话的访问,并允许 Flex 客户端将 HTTP 会话视为“服务器上的另一个对象”。然而,根据我们的经验,使用 HTTP 会话应该是一种“难闻的气味”,它表明了将一些应用程序状态转移到客户端的重构机会。
本章稍后将向您展示如何配置会话对象以供 Flex 客户端访问。
访问 J2EE 会话
Flex 在默认的 web.xml 文件中预先配置了一个会话 servlet,它提供了一个服务器端 Java 对象,该对象可用于访问和修改应用程序的 J2EE 会话。通过在 services.mxml 的服务定位器中放置以下远程对象定义之一,我们为我们的应用程序提供了一个服务,该服务可以在 J2EE 会话中获取和设置对象,以及从会话中删除对象:
<mx:Remote object source="servlet" id="sessionObject" />
<mx:Remote object source="@ContextRoot()" id="sessionObject"/>
与任何其他 <mx:RemoteObject> 标记一样,会话服务可以使用结果和错误事件处理程序来处理从会话中获取项目的请求。web.xml 描述符将会话 servlet 的名称定义为 servlet;因此,我们使用以下示例之一来处理 J2EE 会话:
sessionObject.session( "set","customerID", 700 );
sessionObject.session( "get", "customerID" );
sessionObject.session("remove", "customerID" );
这三个示例演示了如何使用会话服务从 Flex 客户端获取、设置或删除 J2EE 会话中的项目。
所以看起来虽然您可以在 Flex 和后端 Java 之间共享会话数据,但是,建议似乎是这是一种反模式。
关于安全措施,如果您使用 Servlet 过滤器来实现 IP 限制,那么您的安全性可以应用于您的 Web 应用程序中的所有资源(无论它是来自 Struts 还是来自 Flex)。