使用Flex RemoteObject方法时如何设置HTTP标头?
我在服务器端运行火焰。我想使用http标头过滤http请求。我的目标是将额外的参数发送到服务器,而无需更改我热烈的服务的签名。
在客户端,我正在使用Flex RemoteObject方法。
使用Flex WebService组件,可以使用属性httpHeaders设置http标头。我没有在RemoteObject类上找到任何类似的东西...
解决方案
回答
我们可能正在尝试重新发明轮子。有没有我们不能使用标准HTTP身份验证的原因?
回答
RemoteObject使用AMF作为数据通道,并且以与HttpService或者WebService(使用Http)完全不同的方式进行管理。
我们可以做的是调用setCredentials(username,password),然后使用FlexLoginCommand在服务器端捕获它(可以是我们容器的标准容器,也可以是我们自己的容器)。
查找" setCredentials"以及如何在客户端和服务器双方进行处理。
回答
我也考虑使用http标头的原因是,服务器可以在服务版本控制的上下文中"识别" flex客户端。
在服务器上,我始终可以构建一个间接寻址/代理,该代理将允许不同的客户端仅使用1个端点,并根据客户端版本路由到正确的适配器。
问题是在客户端。服务器将如何识别弹性客户端令牌或者"版本"。一种方法肯定是通过身份验证。但是,假设不涉及身份验证?
回答
我有类似的问题,而且我担心使用AMF时没有简单的方法来设置HTTP标头。但是我设计了以下解决方案。
Flex使用HTTP传输AMF,但通过浏览器界面调用它,这使我们可以设置cookie。只是在包含应用程序的文档中调用以下JavaScript
document.cookie="clientVersion=1.0;expires=2100-01-01;path=/";
浏览器应将其传输到服务器,然后我们可以进行过滤(问题在于用户是否关闭了Cookie)。
我们可以通过Flex调用更多的JavaScript函数(更多信息请参见:http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_4.html)。
回答
我无法修改来自flex的http请求,而是可以将自定义标头添加到RemoteObject发送到服务器的mx.messaging.messages.IMessage中,并扩展flex.messaging.services.remoting.adapters.JavaAdapter (用于访问Spring Bean),可以读取标头参数并将其放入HTTPRequest中。
在flex部分,我必须扩展mx.rpc.AsyncRequest
:
声明一个新属性" header",并覆盖invoke方法,该方法检查是否存在用于设置msg.headers的非空值。
和mx.rpc.remoting.mxml.RemoteObject
:
构造函数创建我们的自定义AsyncRequest的新实例并覆盖旧的AsyncRequest,并定义一个setHeaders方法,该方法将参数设置为自定义AsyncRequest。
com.asfusion.mate.actions.builders.RemoteObjectInvoker
(额外:P):
这个代码读取了Mate的地图RemoteObjectInvoker
中声明的参数,并放入了RemoteObject
标头。
我希望这是可以理解的(使用我的apache english xDDD)
再见。阿古!