わかりました-私は最近Javaフィルターを使っていくつかの作業を行っていますが、Webアプリ間を移動するときにコードをリサイクルしなければならないことがよくあります。フィルタに相対的な場所を表示させて、複数のコンテキストで使用できるようにすることもできますが、それでも多くのフィルタを通過します。そこで、コード作成を支援するスーパークラスを作成しました。また、runFilterメソッドをスーパークラスの抽象メソッドとして追加し、標準のdoFilterから分離しました。スーパークラスのコードは次のようになります。
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
try {
runFilter(req,resp,chain);
}
catch (Exception e) {
getLogger().error("Error! Exception:",e);
}
}
さて、ここに問題があります:上記のコードを拡張するフィルターがトリガーされるたびに、上記のロガーで設定したようなエラーが発生しますが、子クラスのrunFilter内から、そのジョブを実行していることを示すロガーメッセージも取得します-転送さえ本来の動作をします。コンソールを見ると、子クラスがフィルターチェーンにアクセスしている行でエラーが発生していることがわかります。
if (isExcluded(debugURI)) {
chain.doFilter(request, response);
return;
} else if (request.getSession().getAttribute("USER") == null) {
getLogger().info("Session with ID " + serialVersionUID + " has timed out. Redirecting to " + getRedirectTarget() + ".");
response.sendRedirect(getRedirectTarget());
chain.doFilter(request, response);
return;
}
else {
chain.doFilter(request, response);
return;
}
runFilterの呼び出しも受信するために、FilterChainを更新(または拡張)する必要がありますか?どんな助けでも非常に役に立ちます。