DWR 远程调用未设置 X-Requested-With 请求 header 值为 XMLHttpRequest

DWR remote calls not setting X-Requested-With request header with value XMLHttpRequest

我们正在使用 spring dwr 实现来执行 ajax 调用。来自 dwr_provider_xml 的片段看起来像...

<bean id="remoteClass"
    class="x.y.z.RemoteImpl">
    <dwr:remote javascript="AjaxSessionManager">
        <dwr:include method="testMethod" />
    </dwr:remote>
</bean>

Javascript 通话:

if ( AjaxSessionManager != undefined  ) {
    AjaxSessionManager.testMethod();
}

我们在服务器端有一些通用代码来检查此调用是否是 ajax 调用并执行一些额外的步骤。

private static final String XMLHTTPREQ = "XMLHttpRequest";
public static boolean isAjaxCall(HttpServletRequest request) {
    return XMLHTTPREQ
         .equals(request.getHeader("X-Requested-With"));
}

但是此方法永远不会返回 true,当我通过 Fiddler 进行跟踪时,请求 header 没有被发送。我相信 jQuery, dojo 和其他流行的框架默认设置了这个。我们是否必须明确地为 DWR 定义一些东西?感谢任何帮助。

我找到了解决办法。 DWR 提供了一个要传递的 headers 选项,所以我的方法调用现在看起来像这样...

AjaxSessionManager.testMethod({callback:{},
headers: {'X-Requested-With':'XMLHttpRequest'}
);