跳过servlet过滤器以获取ajax请求

时间:2013-04-19 13:44:56

标签: html ajax servlets servlet-filters

如何仅针对Ajax请求跳过doFilter中的执行?

截至目前,我正在传递名为isAjax的参数。有没有“标准”的方法来做到这一点?

在这种情况下,如何在过滤器中停止执行?添加return语句会是一种正确的方法吗?

2 个答案:

答案 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'不匹配的每个查询