4

サーバー側でブレイズを実行しています。http ヘッダーを使用して http リクエストをフィルタリングしたいと思います。私の目標は、blazeds サービスの署名を変更せずに、追加のパラメーターをサーバーに送信することです。

クライアント側では、Flex RemoteObjectメソッドを使用しています。

Flex WebService コンポーネントでは、プロパティhttpHeadersを使用して http ヘッダーを設定できます。RemoteObject クラスで同様のものは見つかりませんでした...

4

8 に答える 8

3

これは、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 Spring-Flex:

public class FlexJavaCustomAdapter extends JavaAdapter{
    @Override
    public Object invoke(Message message) {
        String locale = (String) message.getHeader("com.foo.locale");   
        return super.invoke(message);
    }   
}

dispatcher-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>
于 2015-04-03T17:34:08.970 に答える
3

flex から http リクエストを変更することはできませんでした。代わりに、サーバーmx.messaging.messages.IMessageRemoteObject送信するカスタム ヘッダーを追加して、拡張flex.messaging.services.remoting.adapters.JavaAdapter(Spring Bean へのアクセスに使用) すると、ヘッダー パラメータを読み取って HTTPRequest に入れることができます。

フレックス部分では、拡張する必要がmx.rpc.AsyncRequestありました。新しいプロパティ「ヘッダー」を宣言し、msg.headers の設定に null 以外の値があるかどうかを確認する呼び出しメソッドを上書きします。

and mx.rpc.remoting.mxml.RemoteObject: コンストラクターは、カスタム AsyncRequest の新しいインスタンスを作成し、古いものを上書きし、引数を custom に設定AsyncRequestするメソッドを定義します。setHeadersAsyncRequest

com.asfusion.mate.actions.builders.RemoteObjectInvoker(追加:P): これは、メイトのマップで宣言されたパラメーターを読み取り、ヘッダーRemoteObjectInvokerに入れます。RemoteObject

理解できることを願っています(私のApache英語xDDDで)

さよなら。アグル!

于 2010-07-05T08:55:25.177 に答える
1

RemoteObjectはAMFをデータチャネルとして使用し、HttpServiceまたはWebService(Httpを使用)とはまったく異なる方法で管理されます。できることはsetCredentials(username,password)、FlexLoginCommand(コンテナーの標準コマンドまたは独自の派生コマンド)を使用して、サーバー側でこれを呼び出してキャプチャすることです。ルックアップsetCredentialsと、これを両側(クライアントとサーバー)でどのように処理するか。

于 2008-09-25T12:44:37.820 に答える
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 )。

于 2010-07-01T08:22:53.693 に答える
0

車輪を再発明しようとしているのかもしれません。標準の HTTP(s) 認証を使用できない理由はありますか?

于 2008-09-17T09:56:56.397 に答える
0

私も http ヘッダーを使用することを考えていた理由は、サーバーがサービスのバージョン管理のコンテキストでフレックス クライアントを「認識」できるようにするためでした。サーバー上では、さまざまなクライアントが 1 つのエンドポイントのみを使用し、クライアントのバージョンに応じて適切なアダプターにルーティングできるようにする間接/プロキシをいつでも構築できます。問題はクライアント側にあります。サーバーはフレックス クライアント トークンまたは「バージョン」をどのように識別しますか。1 つの方法は、確かに認証によるものです。しかし、認証が含まれていないと仮定しますか?

于 2009-04-22T10:38:52.130 に答える
-1

PHP で $GLOBALS をデバッグして、それを確認できます。これは

$GLOBALS['HTTP_RAW_POST_DATA'];

または、簡単に行うことができます

file_get_contents('php://input');
于 2013-03-12T20:08:21.863 に答える