在我的 Java 应用程序中,一个 jsp 正在调用另一个 jsp,如下所示,
\\ below function is inside abc.jsp
function sessionMark() {
navigator.sendBeacon('logger.jsp');
setTimeout(sessionMark, 2 * 60 * 1000 );
}
此外,abc.jsp 页面上的其他 jsp 调用都正常工作,并且它们正在使用 ajax,如下所示。
$.ajax({
url: "VO.jsp",
type: 'POST',
data: {scripts:scripts,on: 'true',tb:'yes',},
success: function(data) {
//do something
}
});
logger.jsp 给出 403 未知错误。
编辑:
我发现Tomcat web.xml上应用了CorsFilter,如下所示。
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其他详细信息:
我在 HTTPD 服务器上有 ldap 验证,并且该应用程序驻留在 tomcat(反向代理)中。
当 CorsFilter 被删除时,API 可以工作,当它打开时,API 会失败。
有人可以解释为什么 jsp 调用没有经历这个吗?
最终发现,该问题是由于 CorsFilter 检查 header Content-Type 引起的。如果直接调用sendBeacon方法则不会设置。
我使用了下面的代码,它将自行设置标题。
var params = new URLSearchParams({ some_value : 1 })
navigator.sendBeacon('logger.jsp',params);