Java Web ServletにおけるFilterフィルタの詳細

3033 ワード

Java Web ServletにおけるFilterフィルタの詳細
1.略述
          Filterフィルタは、ウェブサーバのすべてのウェブリソースをフィルタリングし、いくつかの特殊な機能(アクセス制御、フィルタリング敏感語彙、圧縮応答情報)を実現する。FilterはServlet容器の要求と応答をチェックして修正することができ、それ自体はrequestとレスポンスレスポンスレスポンスレスポンスレスポンスレスポンスを生成することができず、フィルタリングのみを提供します。
2.ライフサイクル
          (1)サーバを起動し、プロファイルweb.xmlを読み込み、Filterクラスを搭載して実装し、init()を呼び出す。
          (2)ユーザがアクセスしたリソースはFilterのurl-patternによってマッチングされ、doFilterを呼び出し、フィルタリングする対象はchain.doFilter()方法で次のフィルタに渡す。
          (3)アプリケーションが停止または再読み込みされると、destryを呼び出します。
3.chainフィルタチェーン

          二つのフィルタは異なるフィルタリングの役割を果たしています。サーバーはweb.xmlのフィルタ定義の順序に従ってチェーンに組み立てられます。chain.dofilter()を通してフィルタごとのdofilter()を順次実行します。実行中はいつでも中断できます。chain.doFilterを実行しない限り、後のフィルタと要求の内容は実行されません。
4.フィルタの設定
          (1)Filterインターフェースを継承し、doFilter()方法を複写する
          (2)web.xmlの構成は、要求に合った操作をフィルタリングする
                   url-pattern配置について説明>> 

/*
 * MyFilter.java
 *    
 */
package com.baidu.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyFilter implements Filter{

 @Override
 public void destroy() {
 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws IOException, ServletException {
 //   request    
 HttpServletResponse resp = (HttpServletResponse)response;
 HttpServletRequest req = (HttpServletRequest) request;
 String username = (String) req.getSession().getAttribute("username");
 if(req.getRequestURI().contains("Buy") || req.getRequestURI().contains("collect")){
 if(username==null || username.equals("")){ //      ,    
 req.getRequestDispatcher("/login.jsp").forward(req, resp);
 return;
 }
 }
 chain.doFilter(req, resp);
 //   response    
 }

 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
 //filterConfig,  filterConfig getServletContext()        ServletContext
 }
}
 


<filter>
 <filter-name>filter</filter-name>
 <filter-class>com.baidu.web.MyFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>filter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。