【发布时间】:2013-04-12 22:25:54
【问题描述】:
如何仅针对 Ajax 请求跳过 doFilter 中的执行?
到目前为止,我正在传递名为 isAjax 的参数。有没有“标准”的方式来做到这一点?
在这种情况下如何停止过滤器中的执行?添加return 语句是否合适?
【问题讨论】:
-
@NoobUnChained 有帮助!!!
标签: html ajax servlets servlet-filters
如何仅针对 Ajax 请求跳过 doFilter 中的执行?
到目前为止,我正在传递名为 isAjax 的参数。有没有“标准”的方式来做到这一点?
在这种情况下如何停止过滤器中的执行?添加return 语句是否合适?
【问题讨论】:
标签: html ajax servlets servlet-filters
大多数浏览器在发送 AJAX 请求时都会添加一个特殊的请求标头。您可以使用这个 sn-p 轻松检查:
public static boolean isAjaxRequest(HttpServletRequest request) {
return "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
}
但是请注意,这并不是完美的保证,因为此标头以 X- 开头,它不是标准标头,浏览器/客户端代码可能会决定不发送它。
【讨论】:
您的过滤器在 web.xml 文件中声明,它的声明类似于:
<filter-mapping>
<filter-name>NonAjaxServiceFiler</filter-name>
<url-pattern>/non-ajax/*</url-pattern>
</filter-mapping>
因此,每个不匹配“非 ajax”的查询都将被绕过
【讨论】: