7

サーブレットのセキュリティ制約とフィルターについて調べているときに、web.xml ファイルで次の宣言を行いましたが、期待どおりに機能しませんでした。

<security-constraint>
    <web-resource-collection>
      <web-resource-name>BeerSelector</web-resource-name>
        <url-pattern>/SelectBeer.do</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
      </web-resource-collection>
     <auth-constraint>
        <role-name>Admin</role-name>
     </auth-constraint>
 </security-constraint>


  <filter>
   <filter-name>LoginFilter</filter-name>
   <filter-class>model.MyFilter</filter-class>
  </filter>


  <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  <url-pattern>/SelectBeer.do</url-pattern>
  </filter-mapping>

私が読んだことによると、リクエストが特定のURLに到達する前にフィルターに遭遇する必要があるため、セキュリティ制約が最初に呼び出されるのはなぜですか?

セキュリティの観点からは理にかなっていることはわかっていますが(フィルターに到達するには認証が必要です)、request によってトリガーされるシーケンスを知りたいです。

コンテナーは最初に保護されたリソースを検索し、セキュリティ制約をトリガーしますか?

しかし、これは Head First Servlets and Jsp から引用された次の段落と矛盾します。

DD では、リクエストの後に何が起こるかが重要であることに注意してください。つまり、コンテナが応答方法を決定するために要素を調べ始めた時点で、クライアントはすでにリクエストを行っています。リクエストデータはすでにネットワーク経由で送信されています

または、リクエストが filter と security-constraint の両方をトリガーするだけで、 security-constraint が filter よりも優先されるのでしょうか?

4

2 に答える 2

4

コンテナーは、最初にセキュリティ制約を処理します。

簡単に言うと、サーブレット コンテナは最初に着信 URL を調べ、それがいわゆる除外または未チェックの制約に一致するかどうかをチェックします。除外は URL に誰もアクセスできないことを意味し、チェックを外すと反対の意味で、誰もが URL にアクセスできます。

この段階で、いわゆる JACC プロバイダーをインストールした場合、コンテナーは独自のコードを呼び出すことができます。

この後、コンテナは現在のユーザーを認証しようとする場合があり、そこで独自のコードを再度呼び出すことができます。SAM (ServerAuthModule) を登録した場合、SAM を登録しなかった場合、または完全ではない Java EE 実装(TomEE のような Java EE Web プロファイル サーバーやTomcat のような裸のサーブレット コンテナ)ある種のサーバー固有のログイン モジュールが常に呼び出されるか (まれ)、認証されていないユーザーにアクセスが許可されていない場合にのみ呼び出されるか (典型的) は、サーバーによって異なります。

SAM は、要求と応答をリダイレクト、転送、およびラップできるため、フィルターのようなものですが、HTTP サーブレット フィルターではありません。

認証が成功すると、JACC ポリシーが再度呼び出されます。または、JACC ポリシーをインストールしていない場合、コンテナーは独自のメカニズムを使用して、認証時にアクセスできるかどうかを確認します。

アクセス権があると実際に判断された場合、いわゆる「リソース」が呼び出されます。つまり、コンテナーはフィルタリング チェーンの最初のフィルターを呼び出し、要求された URL がマップされたターゲット サーブレットを最終的に呼び出します。 .

SAM の詳細については、http: //arjan-tijms.omnifaces.org/2012/11/implementing-container-authentication.htmlを参照してください。

JACC プロバイダーの詳細: http://arjan-tijms.omnifaces.org/2014/03/implementing-container-authorization-in.html

于 2014-10-07T20:59:36.753 に答える
0

フィルターの実行は、リクエストの「サービス提供」側に入ります。セキュリティ制約はそれ以前に機能します。これらは、サーバーが URL を提供するかどうかを決定するのに役立ちます。フィルターの役割は、「サーブレット実行の直前/直後」に実行されるものと考えることができます。

于 2014-10-07T20:02:57.980 に答える