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