1

私のセットアップは次のとおりです

  • /myApp/mainServlet/ でアクセス可能なメイン アプリケーション サーブレット
  • クライアントからの SOAP 呼び出しにセキュリティ ヘッダー (ユーザー名、パスワード) を追加する小さな「手作りの」SOAP プロキシ
  • (BlazeDS インターフェイスを介して) メイン サーブレットと通信し、この SOAP プロキシを介してサードパーティに SOAP 呼び出しを送信する Flex クライアント

フレックス クライアントには、最初にメイン サーブレットと通信するときに設定されるセッション ID があり、"Set-Cookie: "JSESSION: something; などの HTTP ヘッダーを返します。Path=/myApp". この Cookie はサーバーに送信され、クライアントが関連付けられているセッションを通知します。

問題は、小さな SOAP プロキシがセッション ID を含む Cookie返すことです (それを介して行われる呼び出しごとに)。Flex クライアントは、メインのサーブレットと通信するときにこれらの Cookie を使用します。これらの他のセッションIDは認識されていないため、もちろん何も機能しません...

SOAP プロキシからセッション Cookie を返してほしくないので、Apache フロントエンドに SOAP プロキシからのすべての「Set-Cookie」ヘッダーを削除するように指示することで、問題が解決されることを確認しました。残念ながら (いくつかのセットアップの制限により)、これは本番環境で使用できる方法ではないため、プログラムで修正する必要があります。

サーブレットがセッション ID を設定しないようにするにはどうすればよいですか? セッション ID を送信しないように Jetty (アプリ サーバー) に指示する方法を見たことがあると思いますが、それはメインのサーブレットの機能にも影響し、移植性もありません。

プロキシ サーブレットは非常に基本的な Spring コントローラー (インターフェースを実装するだけ) であるため、基本的には必要最小限のサーブレットにすぎません。

4

1 に答える 1

3

Removing the cookie can be done with res.setHeader("Set-Cookie", null);

Edit: It is good to know, that this removes all cookies, since they are all set in the same header.

I recommend that you don't do it in your servlet, a Filter is better, because it's less intrusive, something like:

public void doFilter(ServletRequest request,
            ServletResponse response,
            FilterChain chain)
                throws IOException, ServletException 
{
    HttpServletResponse res = (HttpServletResponse) response;

    try
    {
        chain.doFilter(request, res);
    }
    finally 
    {
        res.setHeader("Set-Cookie", null);
    }
}

This solution is inspired by this article at randomcoder.

于 2012-04-28T21:12:40.303 に答える