フィルターフィルターでのJavaの使用

フィルタ
フィルタは、変更を行い、リソースファイルにアクセスする前に、クライアントとサーバリソースファイルフィルタとの間にある一連のフィルターを通して要求の判定、要求がブロックされたの途中でルールを遵守する、または変更されていません。また、応答、ブロックをフィルタ処理または応答を変更することができます。
以下、最初にフィルタリングするためのフィルタに送信するようにブラウザから送信された要求は、リリースルールに準拠し、ろ過フィルタ・チェーン内の次のフィルタに提出。次フィルタとweb.xmlシーケンシャルチェーンにおけるその関連構成は、フロントチェーンの前方に配置されています。合格しない場合は、アクセスした後、すべてのフィルター・チェーン・リソース・ファイルによって要求された場合は、フィルタの中央に配置してもよいです。
フィルタは、典型的には、それぞれが対応する動作を実行することもサーブレット必要はなく、コードの再利用を容易にするために、ログイン認証オーソリティ、リソースアクセス制御、濾過敏感単語、文字コード変換などの操作に使用されます。
フィルタの簡単なアプリケーション:
1、新しいクラス、インタフェース実装フィルター(注:のjavax.servletフィルターがあります)。
2、のdoFilter(要求、応答、チェーン) メソッドはフィルタを上書き。さらに、2つのinit()、破壊()メソッドは、一般的に書き換える必要はありません。doFilterフィルタリング動作プロセス。
図3は、フィルタは、web.xmlに配置されています。ここでは、心の中で原則を維持する必要があります。web.xmlのリスナー>フィルタ>サーブレットに。フィルタ前web.xml構成でそのリスナーは、フィルタサーブレット前にコンフィギュレーション、またはエラーが発生します。
<フィルタ>
<フィルタ名> LoginFilter </フィルタ名> //フィルタ名
<フィルタ-class>のパッケージパスcom.nnngu.filter.loginFilter </フィルタクラス> //フィルタクラス
<init-param>の//オプション
の<param-name>のパラメータ名</ PARAM名> //フィルタの初期化パラメータ
パラメータ値の<param-value>の</ PARAM値>
</ PAMM-INIT>
</フィルタ>
<のfilter-mapping> //フィルタマッピング
<フィルタ名> LoginFilter </フィルタ名>
の<url-pattern>アクション指定したフィルタの範囲</ URLパターン>
</のfilter-mapping>
<URL-pattren >フィルタ機能の範囲を定義します。以下の一般的なルール:
1、およびすべてのWebリソースの役割:<URLパターン> / </ URLパターン>。クライアントの要求は、フィルタのアクセス任意のリソースファイルは、あなたを介してアクセスすることができたときに、フィルタを通過する、またはアクセスすることはできません。
フォルダとすべてのファイルに適用される2、<URLパターン> / DIR /
</のurl-pattern>
3、文書効果の特定の種類:<URLパターン> 。拡張</ URLパターン>。たとえば、<URLパターン> .jspという</ URLパターン>は、JSP文書へのアクセスのためのすべての要求をフィルタリングします。
4、AxiTraderのリベートwww.fx61に作用します。
フィルタは、ファイルフィルタの多様を必要とする場合、それは<フィルタマッピング>複数であってもよいし、フィルタリングルールを定義するマッピングのURLパターンを定義します。次のように:
<フィルター>
<フィルター名> LoginFilter </フィルタ名>
<フィルタクラス> com.nnngu.filter.loginFilter </フィルタリングクラス>
</フィルター>
<フィルターマッピング>
<フィルタ名> LoginFilter </フィルタ名>
の<url-pattern>
の.jsp </ URLパターン>
</のfilter-mapping>
<マッピング・フィルタ>
<フィルタ名> LoginFilter </フィルタ名>
の<url-pattern> *。やります</ URLパターン>
</フィルタマッピング>
実施例1:ログイン認証フィルタ実装、何のログインアクセス要求が拒否されていないと、ログインページにリダイレクトされます。
空のdoFilter公開(ServletRequestのarg0は、arg1にServletResponseを、
れるFilterChain ARG2)は、IOExceptionがスローされます、

応答= HttpServletResponseの(HttpServletResponseの)ARG1;
のHttpSessionでrequest.getSessionセッション=();
文字列パスRequest.getRequestURI =();
整数UID =(整数)session.getAttribute( "ユーザID");
IF(path.indexOf(「/ログイン.jsp ")> - 1){ // ログインページをフィルタリングしない
arg2.doFilter(arg0に、ARG1を); //次のフィルタに提出
リターン;
}
(path.indexOf(IF" / register.jsp「) - > 1){//登録ページフィルタリングしないでください
arg2.doFilter(リクエスト、レスポンス);
返す;
}
!IF(UID = nullは){//すでにログインし
arg2.doFilter(要求、応答); //リリース、次に提出フィルタ
}他{
Response.sendRedirect( "login.jspを");
}
}
例2:文字コードセット
公共ボイドのdoFilterを(のServletRequest要求、たServletResponse応答、
れるFilterChain alberghieraカテナは)にIOException {ServletExceptionがスロー
;のHttpServletRequest request2 =(HttpServletRequestの)要求を
HttpServletResponseのRESPONSE2 =(HttpServletResponseの)応答;
request2.setCharacterEncoding( "UTF-8");
response2.setCharacterEncoding( "UTF-8");
chain.doFilterを(要求、応答);
}
フィルターを作成
クラスフィルタの作成および実装するための
注意:
      導入パケットはは、javax.servlet.Filter内のパケットがされ
      initは時にTomcatを再起動初期化され、初期化
      の解除ののdoFilter chain.doFilter方法
勧告doFilter要求及び応答は、ベルトプロトコルHttpServletRequsetとHttpServletResponseのに変換される
サブクラスのHttpバンドプロトコルは、方法は、親クラス、容易な呼び出し後者の方法よりも豊富であるプロトコル、ではないように
コードフィルタのインスタンスを作成する次の
パッケージCNを._02FilterChain;
インポートにjava.io.IOException;
インポートは、javax.servlet.Filter;
輸入れるjavax.servlet.FilterChain。
インポートするjavax.servlet.FilterConfig。
輸入javax.servlet.ServletException;
輸入javax.servlet.ServletRequest;
インポートのjavax.servlet.ServletResponse。
輸入javax.servlet.annotation.WebFilter。BR /> @ WebFilter( "/鎖")
パブリッククラスAFilterは、フィルタ{実装
BR /> @オーバーライド
公共ボイドのinit(に、FilterConfigに、FilterConfig)はServletExceptionが{スロー
// TODO自動生成方法スタブ
BR />}
@Override
(公共ボイドのdoFilter ServletRequest要求たServletResponse応答れるFilterChain鎖)
にIOException、ServletExceptionが{スロー
のHttpServletRequest REQ =(HttpServletRequestの)要求を、
HttpServletResponseのRESP =(HttpServletResponseの)応答。
System.out.println( "A放行之前+++")。
chain.doFilter(REQ、RESP)。
}
@Override
BR />のSystem.out.println( "リリースAの後---");
}
@Override
公共ボイド(破壊){
// TODO自動生成されたメソッドスタブBR />}
}
再度フィルタweb.xml内構成
設定方法
のRE web.xml構成1.
次に2.クラスと@WebFilter(「ノックダウンパス」)を追加し、
チェーンのフィルタ実装は
       <フィルタマッピングが>呼び出すように設定に応じて呼び出され
以下は、コードのweb.xmlの例である
<フィルター>
<フィルタ名> CHAINA </フィルタ名>
<フィルタクラス> cn._02FilterChain.AFilter </フィルタクラス>
</フィルタ>
<フィルター>
<フィルタ名> chainB </フィルタ名>
<フィルタクラス> cn._02FilterChain.BFilter </フィルタクラス>
</フィルター>
<フィルター>
<フィルタ名> chainC </フィルタ名>
<フィルタクラス> cn._02FilterChain.CFilter </フィルタクラス>
</フィルタ>
<! -执行顺序按照のfilter-mapping执行- >
<のfilter-mapping>
<フィルタ名> chainB </フィルタ名>
の<url-pattern> /鎖</ URLパターン>
</フィルタリングマッピング>
<フィルタマッピング>
<フィルタ名> CHAINA </フィルタ名>
の<url-pattern> /鎖</ URLパターン>
</フィルタマッピング>
<フィルタマッピング>
<フィルタ名> chainC </フィルタ名>
の<url-pattern> /鎖</ URLパターン>
</フィルタリングマッピング>
パッケージcom.zzxtit.common.filter ;
インポートにjava.io.IOException;
インポートは、javax.servlet.Filter;
輸入れるjavax.servlet.FilterChain。
インポートするjavax.servlet.FilterConfig。
輸入javax.servlet.ServletException;
javax.servlet.ServletRequestインポート、
読み込みのjavax.servlet.ServletResponse;
publicクラスCharacterEncodingFilter実装フィルタ{
プライベート静的文字列エンコーディング= "UTF-8";
公共ボイドのinit(に、FilterConfigに、FilterConfig)はServletExceptionが{スロー
エンコーディング= filterConfig.getInitParameter( "符号化"を?)== NULL "UTF-8":filterConfig.getInitParameter( "符号化");
}
公共ボイドのdoFilter(のServletRequestリクエストは、ServletResponseを応答、れるFilterChainのカテナのalberghieraは)
にIOException、ServletExceptionが{スロー
Request.setCharacterEncoding(エンコーディング);
}
}
注:
(1)getInitPamaterはweb.xmlのからenciding変数のデフォルト値を得ることを目的とする使用
の一般的なフィルタは、チェーンである、web.xmlのがよく、いくつかがあるいくつかが装備されている:(2)鎖の役割。一緒に一つずつ、チェーン。
代码实现
<フィルター>
<フィルタ名> CharacterEncodingFilter </フィルタ名>
<フィルタクラス> com.zzxtit.common.filter.CharacterEncodingFilter </フィルタクラス>
の<init-param>要素
の<param-name>のエンコーディング</ PARAM名>
の<param-value>はUTF-8 </ PARAM値>
</ INIT-param>の
</フィルタ>
<フィルタマッピング>
<フィルタ名> CharacterEncodingFilter </フィルタ名>
の<url-pattern> / * </のurl-pattern>
</のfilter-mapping>

おすすめ

転載: blog.51cto.com/14511863/2446199