2016-05-24 25 views
0

私は、次のフィルタ従っています:すでにキャッチされた例外をキャッチするにはどうすればよいですか?

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
    ServletException { 

    try { 
    chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response); 
    } catch (XssAttackException e) { 
    request.getRequestDispatcher("/XssAttack").forward(request, response); 
    } 
} 

とクラスXssAttackExceptionは次のとおりです。コードをデバッグした後

public class XssAttackException extends RuntimeException { 

private static final long serialVersionUID = 1L; 

} 

を、私はどこかで春の枠組みの中ですべての例外がキャッチされていることに気づきました。今私はキャッチボックも走る方法が必要です。 XSSRequestWrapper内部

UPDATE

我々は持っている:

@Override 
public String getHeader(String name) { 

    String value = super.getHeader(name); 
    return stripXSS(value); 
} 

そして

private String stripXSS(String value) { 

    if (value != null) { 
    value = persianUtf8(value); 
    if (!value.equals(Jsoup.parse(value).text())) { 
     throw new XssAttackException(); 
    } 
    value = Jsoup.parse(value).text(); 
    for (Pattern scriptPattern : patterns) { 
     if (scriptPattern.matcher(value).matches()) { 
      throw new XssAttackException(); 
     } 
     value = scriptPattern.matcher(value).replaceAll(""); 
    } 
    } 
    return value; 
} 
+0

どこか?おそらく例外が以前のフィルタを投げているのでしょうか? – Leo

+0

ここでXssAttackExceptionはどこから来ますか?完全修飾クラス名とjarファイルは何ですか?私は春にそのクラスを見つけることができません。 –

+0

@Leoいいえ私のデバッグは、それがXssAttackExceptionの正確なクラスであることを示しています – Khodabakhsh

答えて

0

をこれはあなたのquestion.Assumed長すぎるコメントのための答えであると仮定しないでください。 私は自分のCustomExceptionクラスを作成しました。

public class CustomException extends RuntimeException { 
} 

カスタムサーブレットクラスをXSSRequestWrapperとして作成し、カスタム例外をコンストラクタにスローします。

public class MyServlet implements ServletRequest { 

    public MyServlet() { 
     throw new CustomException(); 
    } 
// other override methods go here 
} 

と私のフィルタクラスで

try { 
     chain.doFilter(new MyServlet(), response); 
    } catch (CustomException e) { 
     System.out.println("xxxxxxxxxxxxxxx I got it xxxxxxxxxxxxxxxxxxx"); 
    } 

このコードは正常に動作。あなたのプログラムでは、いくつかの例外が発生していると思います。したがって、この例外オブジェクトにはフィルタクラスのtryブロックからのミスがあり、Springコンテナによって処理されます。

関連する問題