复制实例后 CORS 不工作

CORS not working after I copied the instance

我有一个 运行 实例,其中包含 tomcat 7 和 java 应用程序。我想复制实例。在 Amazon 中,我单击 "create image",并从中启动了一个新实例。之后,我尝试使用新实例。当我发出简单的请求时它可以工作,但是当我从浏览器尝试时我得到 CORS 错误:

Access to XMLHttpRequest at 'https://xxxxxx/getConfiguration' from origin 'http://xxxxxx:9000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我的服务器或前端配置没有任何变化。当我使用旧服务器时它可以工作。 cors 过滤器是相同的:

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>

    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Access-Control-Request-Method,Access-Control-Request-Headers,authorization</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
    </init-param>
</filter>


<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

您的 javascript/html/css 是否与您的旧实例在同一台服务器上?

当浏览器做一些API调用时,如果API地址与javascript路径不同server/domain,浏览器将检查CORS header API 以确保此服务器允许 cross-origin 请求。在旧实例中,一切都在同一个地方,所以不需要做。但在新实例中,您的应用需要 return CORS header 到客户端。

您可以在 Tomcat 中查看此问题以了解如何将 CORS header 添加到您的应用程序:

Set CORS header in Tomcat

比较您使用的初始化参数名称

<init-param>
    <param-name>cors.allowOrigin</param-name>
    <param-value>*</param-value>
</init-param>
<init-param>
    <param-name>cors.supportsCredentials</param-name>
    <param-value>false</param-value>
</init-param>

configuration reference Tomcat 7 的文档。您拼写错误。

cors.allowed.origins 的默认值已于 2018 年 5 月(Tomcat 7.0.89、8.5.32、9.0.9)更改为解决 CVE-2018-8014(bug 62343).

我只使用这些依赖项并使用所有方法,POST、GET 等...

    <dependency>
        <groupId>com.thetransactioncompany</groupId>
        <artifactId>java-property-utils</artifactId>
        <version>1.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.thetransactioncompany</groupId>
        <artifactId>cors-filter</artifactId>
        <version>1.9.1</version>
    </dependency>

在您的 web.xml 下面添加此配置

    <filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>