如何仅针对Ajax请求跳过doFilter
中的执行?
截至目前,我正在传递名为isAjax
的参数。有没有“标准”的方法来做到这一点?
在这种情况下,如何在过滤器中停止执行?添加return
语句会是一种正确的方法吗?
答案 0 :(得分:2)
大多数浏览器在发送AJAX请求时都会添加一个特殊的请求标头。您可以使用此代码段轻松检查:
public static boolean isAjaxRequest(HttpServletRequest request) {
return "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
}
但请注意,这不是完美保证,因为此标头以X-
开头,它不是标准标头,浏览器/客户端代码可能决定不发送它。
答案 1 :(得分:0)
您的过滤器在web.xml文件中声明,并且声明类似于:
<filter-mapping>
<filter-name>NonAjaxServiceFiler</filter-name>
<url-pattern>/non-ajax/*</url-pattern>
</filter-mapping>
因此,将绕过与'non-ajax'不匹配的每个查询