2007年10月16日火曜日

フィルタ

javax.servlet.Filter はリクエストをインターセプトして ServletRequest や ServletResponse に処理を行うことが出来る。
主なフィルタの使い方
・アプリケーションへのリクエストをインターセプトして文字エンコーディングを設定する。
・フィルタでセキュリティを一括管理する

web.xml への定義

フィルタは配備記述子 web.xml へ定義します。

(例)
<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>filter.MyFilter</filter-class>
    <init-param>
            <param-name>EncodeName</param-name>
            <param-value>Shift_JIS</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

filter-name : フィルタクラスの名前
fiter-class : フィルタクラスの完全修飾名
init-param : 初期化パラメータ。FilterConfig オブジェクトから取得できる。
url-pattern : フィルタを適用する URL を指定する。 *(ワイルドカード) が使用できる。
dispatcher : REQUEST,FORWARD,INCLUDE,ERROR を指定。デフォルトは REQUEST



Filter インターフェースのメソッド
public void init(FilterConfig config)

public void doFilter(ServletRequest request, 
    ServletResponse response, FilterChain chain)

public void destroy()

<サンプル>
public class MyFilter1 {
    private FilterConfig config = null;
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
    }
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest)req;
        String url = request.getRequestURI();

        /* データベース等でなんらかのカウントアップ処理 */
    
        /* 次のフィルターへ */
        chain.doFilter(req,res);
    }
    public void destroy() {}
}

    <filter>
        <filter-name>MyFilter1</filter-name>
        <filter-class>filter.MyFilter1</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>MyFilter1</filter-name>
        <url-pattern>/MyFilter1</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>

0 件のコメント: