Java 如何使CORS tomcat 8.5过滤器能够访问静态文件?

Java 如何使CORS tomcat 8.5过滤器能够访问静态文件?,java,tomcat,cors,Java,Tomcat,Cors,我读了很多类似的问题,但没有一个解决方案对我有效,所以我发布了另一个:/我必须从我的angular客户端获得Tomcat 8.5.37服务器上的一些pdf文件,但我经常被Cors策略阻止 如何正确添加Cosr标头 我正在使用Tomcat 8.5.37(实际上是本地主机) 首先,我在/webapps/my files下为这些文件创建了一个文件夹,并在其中添加了一个简单的“file.pdf”,然后在我的server.xml中的tag中添加了以下内容: 然后我把它放在我的web.xml文件中: &l

我读了很多类似的问题,但没有一个解决方案对我有效,所以我发布了另一个:/我必须从我的angular客户端获得Tomcat 8.5.37服务器上的一些pdf文件,但我经常被Cors策略阻止

如何正确添加Cosr标头

我正在使用Tomcat 8.5.37(实际上是本地主机)

首先,我在/webapps/my files下为这些文件创建了一个文件夹,并在其中添加了一个简单的“file.pdf”,然后在我的server.xml中的tag中添加了以下内容:

然后我把它放在我的web.xml文件中:

<filter>
 <filter-name>CorsFilter</filter-name>
 <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>CorsFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

克斯菲尔特
org.apache.catalina.filters.CorsFilter
克斯菲尔特
/*
我的客户端应用程序是Angular 7应用程序,我正在使用“ng2 pdf viewer”模块显示pdf文件。根据模块文档,它对指定的URL进行HTTP get调用,以获取文件并显示它。据我所知,我可以在我的Chrome控制台“网络”会话中看到get调用。在“响应标题”会话中,我可以看到一些标题,如“内容类型”和“内容长度”,具有正确的值,但缺少所有其他标准Cors标题(访问控制允许来源、访问控制允许方法ecc…)

如果我使用一个Chrome扩展来模拟Cors头文件,我会得到正确的pdf文件,组件会按预期工作,但是如果没有这个扩展,我会得到Cors阻塞

我将Cors过滤器放在我的web.xml文件中,在“内置过滤器定义”会话的第一个位置,但它不起作用。 根据Tomcat的官方文档,我添加了很多
,但都不起作用。 我尝试使用自定义Cors筛选器,使用
HttpServletRequest
HttpServletResponse
实现,并使用
ContainerRequestContext
ContainerResponseContext
实现,但两者都不起作用

当我写“”时,我的浏览器会显示它。当我试图从我的客户那里获取文件时,我被CORS阻止


我如何设置一个好的Cors过滤器来从我的应用程序访问这些文件?我哪里做错了?

我没有测试它,但我想您可能想要测试
httpHeaders
属性:

[src]="{ url: 'http://...', httpHeaders: { 'h1': 'v1', 'h2': 'v2', 'hn': 'vn' }}"
看。它引用了Mozilla的pdf.js属性,其中包括
httpHeaders
。它是:

这不是很有用。然而,ng2 pdf viewer确实提到了
httpHeaders

还有带有凭据的
,但这是关于在CORS请求中发送Cookie的,我认为这不是您的问题所在。

添加如下内容

<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>

克斯菲尔特
org.apache.catalina.filters.CorsFilter
科尔斯
*
克斯菲尔特
/*

您能否提供试图从Tomcat服务器访问资源的客户端应用程序的请求url。如果您指的是我不知道的特定get call url,因为外部库没有向我显示明确的url,那么来源是,请求的资源是。我在angular应用程序中使用该组件进行调用,您必须验证类org.apache.catalina.filters.CorsFilter是否已加载。检查您的tomcat服务器的lib目录中是否有Catalina.jar,如果有,您可以在重启tomcat实例后尝试从angular客户端访问pdf,如果不包括jar并重试。我用WinRar打开了罐子,路径是正确的,che CorsFilter类就在那里。解决方法:我有三个不同的tomcat实例,CATALINA_HOME是错误的。修正了该变量,即使在没有过滤器规格的情况下也能正常工作。很抱歉犯了大错误,这在Tomcat8.5上有效!你能告诉我如何使用实际的图案吗?我只想允许引用:[和''您能为非80端口和所有子位置显示示例吗例如:'*'?好的,我想出来了。它是这样的:uat.domain.pl,https://qua.domain.pl:8080 :)
<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>