JAVAフィルタ(フィルタ)

.Filterのご紹介

フィルタがリソースにアクセスするクライアントのためのフィルタであり、解放の条件に沿って、それは解放の条件を満たしていない、と論理的にターゲットリソースへのアクセスの前と後に処理することができます

役割:

  • 抽出コード(全てのサーブレットを介して一体化されているように、それぞれを記述する必要を符号、符号化を要求しないように設定することができます)
  • 著作権管理(試合が解放された場合は、見て、現在のユーザーの役割にログインして、フィルタ内のリソースへのアクセスを取ら一致していませんが解除されていません)
     

二.Filter詳細

ライフサイクルを濾過し、ライフサイクル・アプローチに関連しました

フィルタインターフェイスは、3つのメソッドを有し、この方法は、フィルタ寿命の三に関連付けられています 

  • INIT(に、FilterConfig)は:フィルターオブジェクトが作成されるときに実行される、フィルタオブジェクトの初期化方法を表します
  • doFilter(のServletRequest、ServletResponseを、FilterCha):リソースが濾過されている場合、コアメソッドフィルタは、フィルタの代表を行い、その後、フィルタは、このように構成されているので、このリソースにアクセスするたびには、方法のdoFilter実行されます
  • )(Destoryは:破壊フィルタの方法は、オブジェクトがフィルタを破壊された場合に実行される方法の代表であります

Filterオブジェクトのライフサイクル: 

  • フィルタの作成時:サーバーの起動時にこのフィルターオブジェクトが作成されます
  • ときに破壊フィルタ:サーバーのシャットダウン時にフィルタが破壊
  • 私は、フィルタリングフィルタ資源を訪れるたびに、(のdoFilterを行います)

フィルタAPIの詳細

INIT(に、FilterConfig arg0に)前記オブジェクト・パラメータを表す構成情報はフィルタのパッケージ構成情報の内部オブジェクトをフィルタARG0。

@Override
public void init(FilterConfig arg0) throws ServletException {
    //获得web.xml中<filter-name>QuickFilter1</filter-name>的名字
    System.out.println(arg0.getFilterName());
    //获得当前filter的初始化参数<init-param><param-name>aaa</param-name><param-value>bbb</param-value></init-param>
    System.out.println(arg0.getInitParameter("aaa"));
    //获得所有初始化参数的名字
    System.out.println(arg0.getInitParameterNames());
    //获得servletContext对象(故先有servletContext)
    System.out.println(arg0.getServletContext());
    System.out.println("init...");
}

Destoryは()メソッドは、フィルタオブジェクトが破棄されるときに実行されます

doFilter次のように(れるFilterChain ARG2のServletRequest arg0に、たServletResponse ARG1は、)場合、分析パラメータ、コアろ過プロセスをフィルタ: 

  • ServletRequestのarg0:パッケージ内には、コンテンツクライアントhttp要求であります
  • たServletResponse引数1:応答の代表
  • ServletRequest / ServletResponseを:メソッドコンテナの実装のすべてのウェブのdoFilter要求とのdoFilterのパラメータとして渡された応答オブジェクトを作成するための責任があります。ターゲット・リソース要求と応答にアクセスする際の要求は、サービスメソッドに対応しています。
  • れるFilterChain:フィルタ・チェーン・オブジェクトオブジェクトのメソッドのすべてのフィルタと対応する配列は、解放要求をのdoFilterできるまで[注次フィルタは順序に従って行わフィルタマッピングです]

チェーンフィルタ

web.xmlがフィルタのフィルタ順に複数のフィルタを定義し、web.xmlの同じフィルタの順序を定義します。ろ過した場合、フィルターをフィルターチェーンオブジェクトがあるかどうかのdoFilter()メソッドは、サーブレットコンテナチェックれるFilterChain各コールオブジェクト; NOリソースインターフェース操作進みます

フィルタの設定

<filter>
  <filter-name>QuickFilter1</filter-name>
  <filter-class>filter.QuickFilter1</filter-class>
  <init-param>
      <param-name>aaa</param-name>
      <param-value>bbb</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>QuickFilter1</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher><!-- 直接访问某个资源时执行filter -->
</filter-mapping>
<filter>
  <filter-name>QuickFilter2</filter-name>
  <filter-class>filter.QuickFilter2</filter-class>
</filter>
<filter-mapping>
  <filter-name>QuickFilter2</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>FORWARD</dispatcher><!-- 转发时才执行filter -->
</filter-mapping>

アイテムの説明:

<フィルター>の設定項目は以下のとおりです。

    <フィルター名>:フィルタの名前

    <フィルタクラス>:クラスに対応するフィルタの構成

    <インティ-param>の:初期化パラメータ

    <PARAM名>:パラメータ名

    <Paramの値>:パラメータ値 

設定項目における<のfilter-mapping>:

    <フィルター名>:フィルタ名、および<フィルタ> <フィルタ名>同じ

    <url-pattern>:リソース・パス・フィルター

    <ディスパッチャ>は:リソースによって呼び出されるフィルタを指定し、デフォルトはREQUESTです

URLパターンの設定

  • 完全一致/ sertvle1
  • ディレクトリマッチング/ AAA / BBB / *(ほとんど)
  • /ユーザー/ *:このフィルタのフォアグラウンドにリソースへのアクセス
  • /管理/ *:このフィルタを実行するアクセスリソースの背景
  • 拡張子は.abc .jspファイルと一致して

注:URLパターンのサーブレット名を代わりに使用することができ、それは、濾過表される指定されたサーブレットを混合してもよいです。

ディスパッチャ:へのアクセス

  • REQUEST:デフォルト値、リソースへの直接アクセスのフィルタ代わっ(それは一度訪問を転送され、この時点では、二回のアクセスをリダイレクト)
  • FORWARD:実行転送フィルタ
  • INCLUDE(リソースBを含むリソースを行う場合)フィルタを実行するときにリソースを含みます
  • ERROR:エラーがフィルター(ジャンプエラーページに実行)を発生したときのジャンプが実行されます
     

おすすめ

転載: blog.csdn.net/qq_42239765/article/details/90545916