我有以下过滤器:
@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;
}
答案 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容器处理。