我在服務器端運行blazeds。我想用http頭過濾http請求。我的目標是向服務器發送額外的參數,而不更改我的blazeds服務的簽名。如何使用Flex RemoteObject方法設置HTTP標頭?
在客戶端,我使用Flex RemoteObject方法。
使用Flex WebService組件,可以使用屬性httpHeaders來設置http標頭。我還沒有在RemoteObject類上找到類似的東西...
我在服務器端運行blazeds。我想用http頭過濾http請求。我的目標是向服務器發送額外的參數,而不更改我的blazeds服務的簽名。如何使用Flex RemoteObject方法設置HTTP標頭?
在客戶端,我使用Flex RemoteObject方法。
使用Flex WebService組件,可以使用屬性httpHeaders來設置http標頭。我還沒有在RemoteObject類上找到類似的東西...
您可能試圖重新發明車輪。有沒有理由不能使用標準的HTTP驗證?
RemoteObject使用AMF作爲數據通道,並以與HttpService或WebService(使用Http)完全不同的方式進行管理。 你可以做的是調用setCredentials(username,password)
,然後使用FlexLoginCommand(或者是你的容器的標準版本,或者派生自己的版本)在服務器端捕獲它。 查找setCredentials
以及如何在雙方(客戶端和服務器)上處理此問題。
RemoteObject調用通過HTTP進行,只是內容以Action Message Format(AMF)編碼。 – 2009-03-20 20:37:18
我一直在想使用http頭的一個原因是服務器能夠在服務版本化環境中「識別」flex客戶端。 在服務器上,我始終可以構建一個間接/代理,以允許不同的客戶端僅使用1個端點並根據客戶端版本路由到正確的適配器。 問題出在客戶端。服務器如何識別Flex客戶端令牌或'版本'。一種方法當然是通過身份驗證。但是,假設沒有涉及認證?
我有類似的問題,我怕使用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)。
我不能從柔性修改HTTP請求,而不是我可以添加自定義頁眉到mx.messaging.messages.IMessage
是RemoteObject
發送到服務器,並在那裏,延長flex.messaging.services.remoting.adapters.JavaAdapter
(用於訪問春豆),它是更多鈔票來讀取頭參數,並把它們進入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): 這一個讀取大副地圖RemoteObjectInvoker
宣佈帕拉姆,並在RemoteObject
頭放。
我希望這將是可以理解的(與我的Apache英語XDDD)
再見。阿古爾!
你可以在PHP中調試$ GLOBALS來查看。 我認爲這是在
$GLOBALS['HTTP_RAW_POST_DATA'];
,或者你可以簡單的做
file_get_contents('php://input');
最近,我們遇到了同樣的問題,這是我們增加了我們的自定義標題,而無需創建一個子類:
var operation:AbstractOperation = _remoteSession.getOperation('myRemoteOperation');
var async:AsyncRequest = operation.mx_internal::asyncRequest;
async.defaultHeaders = {my_header:'my_value'};
AsyncRequest對象實際上可以通過操作對象通過mx_internal命名空間訪問。
這爲我工作用的BlazeDS和Spring-Flex的1.5.2
軟硬度:
use namespace mx_internal;
var service:RemoteObject = new RemoteObject(destination);
var operation:Operation = service[functionName];
operation.asyncRequest.defaultHeaders = {company:'company'};
var token:AsyncToken = operation.send();
的Java彈簧軟硬度:
public class FlexJavaCustomAdapter extends JavaAdapter{
@Override
public Object invoke(Message message) {
String locale = (String) message.getHeader("com.foo.locale");
return super.invoke(message);
}
}
調度-servlet.xml中
<bean id="customAdapter" class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg value="com.codefish.model.flex.FlexJavaCustomAdapter"/>
</bean>
<flex:message-broker id="_messageBroker" services-config-path="classpath*:/com/codefish/resources/spring/services-config.xml" >
<flex:remoting-service default-adapter-id="customAdapter"
default-channels="my-amf, my-secure-amf" />
</flex:message-broker>
</bean>
不,我不能使用HTTP身份驗證,我有一個非常特殊的需求。 – 2008-09-17 20:12:29