- PR -

複数のフィルター処理をひとつにまとめる方法について

1
投稿者投稿内容
Masayuki2501
常連さん
会議室デビュー日: 2006/01/02
投稿数: 25
投稿日時: 2006-08-26 13:20
こんにちは。

サーブレットを用いて、WEBアプリを作っていますが、
すべてのリクエストに対して、特定の処理を施しています。

たとえば、web.xmlで、/*のリクエストについて、
EncodingFilterとNDCフィルター(log4jの記載方法)などを施しています。

現在、/*のリクエストに施すフィルターの数だけ、web.xmlに記載しています。

----
<!-- エンコーディングフィルター -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>EncodingFilter</filter-class>
・・・・
</filter>

<!-- NDCフィルター -->
<filter>
<filter-name>NDCFilter</filter-name>
<filter-class>NDCFilter</filter-class>
・・・・
</filter>


<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>NDCFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
----

それぞれ、個別にweb.xmlに記載していますが、
この2つのフィルターをひとつにまとめることは可能でしょうか?

具体的には、以下の感じです。

----
public class InitialFilter implements Filter {
・・・
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException {

if (filterConfig == null) {
return ;
}

// エンコーディングフィルター
request.setCharacterEncoding(encoding);

// NDCフィルター
if (request instanceof HttpServletRequest) {
HttpServletRequest req = (HttpServletRequest) request;
NDC.push(req.getSession().getId());
try {
chain.doFilter(request, response);
} finally {
NDC.remove();
}
}

// リソースの呼び出し
chain.doFilter(request, response);

}
----
上記のようなフィルターをひとつだけですと、リクエストに対して、
処理がおこなえていませんでした。

web.xmlにも、InitialFilterのみを/*に対して、処理させることは可能なのでしょうか?


ご存知のかた、よろしくお願いします。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-08-27 03:04
コードから全てが読み取れませんが、デバッガで確認するのが一番でしょう。
まとめると、動く・動かないと言う次元の話ではなく、
単純にコードに問題があるから動かないだけだと思います。

例外が発生していたり、doFilterの最初のif文でreturnしているとか・・・
デバッガでどのコードが実行されているか確認してみましょう。
1

スキルアップ/キャリアアップ(JOB@IT)