如何抓住已经抓到的异常?

时间:2016-05-24 07:51:15

标签: java spring spring-mvc exception exception-handling

我有以下过滤器:

@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;

}
在调试代码之后,我意识到spring框架中的某个地方正在捕获所有异常。现在我需要一种方法,我的抓斗也会运行。

  

更新

XSSRequestWrapper内我们有:

@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;
}

1 个答案:

答案 0 :(得分:0)

请不要认为这是您的问题的答案。已经过了太久的评论。 我创建了我的CustomException类。

public class CustomException extends RuntimeException {
}

并创建自定义Servlet类作为您的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容器处理。