1

I have a filter mapped to /* and my security constraint is mapped to /*.

The filter perfoms a request forward when the application is not configured (an entry in the database).

When I access the application I am expecting to see the login page that is served up by the j_securit_check but instead the filter is executed and the forward is performed. This ends in a loop as I never get to the login page.

フィルターが処理される前にセキュリティ チェックが実行されたと思いましたか?

これは WebSphere 8.0.0.4 です。Tomcat と JBoss の下で正常に機能します。

読んでくれてありがとう。

4

4 に答える 4

1

私の理解によると、セキュリティ上の理由から、j_security_check呼び出しをインターセプトできないはずです。

Webspehereのバグのように聞こえます(グーグルで検索しましたが、古いバージョンのWebsphereのバグ/機能でしたが、8.0.0.4についてはわかりません)

于 2012-11-07T14:10:18.933 に答える
0

セキュリティ制約を/*にマップし、次にフィルターを/(ワイルドカードなし)にマップすると、すべてが期待どおりに機能します。

これは、セキュリティチェックを実行する前にサーブレットフィルターを実行する理由に関してIBMから得た回答です。

Security L3は、Webcontainerチームの開発者と話をしました。彼は、サーブレットフィルタが最初に実行されるのはWADであると述べました。j_security_checkはWebリソースであり、すべてのWebリソース要求と同様に、サーブレットフィルターが最初に実行されます。これがあなたの懸念に対する簡単な答えです。セキュリティL3は、リクエストのフローを調べました。フィルタのコーディング方法では、login.jspの結果がクライアントに返されることはないため、j_security_checkが実行されることはありません。フィルタが「request.getRequestDispatcher( "test / test-page.jsp")。forward(request、response);」を実行していることがわかります。開発者は、forward()リクエストは認証チェックされていないと言いました。これもWADです。したがって、サーブレットフィルタを再設計するときは、以下をminfに保持してください。

  • 1サーブレットフィルタは、j_security_checkまたはWebリソースの前に呼び出されます。
  • 2 request.getRequestDispatcher()。forward()を使用すると、認証チェックが無効になります。

TomcatまたはJBossで実行すると期待どおりに機能するため、フィルターを再設計することはありません。変更する必要があるのは、web.xmlのマッピングだけです。

于 2012-12-12T20:26:31.073 に答える
0

IBM からの別の回答を次に示します。彼らは、フィルターからの転送は j_security_check によって保護されないことを示唆しているため、WebSphere を使用するときは注意してください。Jboss と Tomcat はこのようには動作しません。

Webcontainer の開発者にもこれを見てもらい、次の更新を受け取りました。

web.xml は、[configFilter] が /* にマップされていることを示しています。つまり、configFilter /*

また、セキュリティはすべて、つまり General Auth にマップされます。/*

インバウンド要求は [/rootFilter/test/test-page.jsp] に対するもので、セキュリティが呼び出された後、[rootFilter/login.jsp] にリダイレクトされます。リクエスト [rootFilter/login.jsp] については、フィルタ [configFilter]] がすべてのリクエストにマップされているため、[configFilter] が実行され、リクエストが [/rootFilter/test/test-page.jsp] に転送されてテストされます。 -page.jsp が提供されます。

Java Servlet Specification in 13.2 Declarative Security によると、セキュリティはディスパッチされたリクエストに対して有効ではないため、[/rootFilter/test/test-page.jsp] に転送されたリクエストではセキュリティがチェックされません。

以下は仕様です。セキュリティ モデルは、Web アプリケーションの静的コンテンツ部分と、クライアントから要求されたアプリケーション内のサーブレットとフィルタに適用されます。サーブレットが RequestDispatcher を使用して、転送またはインクルードを使用して静的リソースまたはサーブレットを呼び出す場合、セキュリティ モデルは適用されません。

お客様は、アプリケーションの設計を調べて、フィルターがすべての要求にマップされていないこと、またはフィルターが別のリソースに転送されていないことを確認する必要があります。

于 2012-12-21T08:20:53.203 に答える
0

できませんが、認証後処理のために j_security_check にフィルターをマップするか、独自のカスタム ログイン モジュールまたはトラスト アソシエーション インターセプターをコーディングできます。ここで例を参照してください。 1112_deluca/1112_deluca.html

于 2012-11-07T14:59:39.147 に答える