Tomcat 用于Post请求的弹性Beanstalk CORS配置

Tomcat 用于Post请求的弹性Beanstalk CORS配置,tomcat,configuration,cors,amazon-elastic-beanstalk,preflight,Tomcat,Configuration,Cors,Amazon Elastic Beanstalk,Preflight,从本地主机提交post请求时,我收到以下错误- XMLHttpRequest cannot load http://sample-env.elasticbeanstalk.com/resource Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin

从本地主机提交post请求时,我收到以下错误-

XMLHttpRequest cannot load http://sample-env.elasticbeanstalk.com/resource 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:8080' is therefore not allowed access
但是,在我的S3实例的CORS配置编辑器中,我有以下内容-

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedOrigin>http://*</AllowedOrigin>
    <AllowedOrigin>https://*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
是否有人认为我的配置有问题,或者是否必须添加其他内容?我能够将CORS过滤器添加到我的tomcat的web.xml中,并且一切正常,因此我认为我配置的elastic beanstalk不正确

编辑

添加了以下.config文件(以前是.yaml)

添加_cors.config.config

files:
"/etc/httpd/conf.d/cors.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
        <Location "/">
            Header set Access-Control-Allow-Origin: *
            Header set Access-Control-Allow-Methods: "POST, GET, PUT, DELETE, OPTIONS"
            Header add Access-Control-Allow-Headers: "Authorization, Content-Type, Accept"
            Header set Access-Control-Allow-Credentials: true

            SetOutputFilter DEFLATE
        </Location>
我重新部署了war,但仍然有相同的错误-“不存在“访问控制允许源”标题”

解决方案

不需要。需要ebextensions文件。我只需要将CORS过滤器添加到web.xml中,就像我在tomcat的conf/web.xml中所做的那样

  <!-- ================== CORS FILTERS ===================== -->
  <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>
    <init-param>
      <param-name>cors.allowed.methods</param-name>
      <param-value>GET,POST,HEAD,OPTIONS</param-value>
    </init-param>
    <init-param>
      <param-name>cors.allowed.headers</param-name>
      <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
    <init-param>
      <param-name>cors.exposed.headers</param-name>
      <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
      <param-name>cors.support.credentials</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>cors.preflight.maxage</param-name>
      <param-value>10</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

克斯菲尔特
org.apache.catalina.filters.CorsFilter
科尔斯
*
cors.methods
获取、发布、头部、选项
cors.allowed.headers
内容类型、X-Requested-With、accept、Origin、访问控制请求方法、访问控制请求标头
cors.exposed.headers
访问控制允许来源,访问控制允许凭据
cors.support.credentials
真的
cors.preflight.maxage
10
克斯菲尔特
/*

我对AWS EB不太了解,但是假设tomcat前面有一个apache反向代理,那么您可以使用ebextensions并在那里添加CORS头信息。见此:


谢谢。我尝试添加一个cors配置文件,但仍然遇到同样的问题。请尝试根据文档将文件扩展名更改为.config(remove.yaml):然后重新部署。另外,仔细检查yaml文件中的缩进。根据你上面粘贴的内容,它看起来缺少了很多缩进。谢谢。我更改了扩展名并添加了适当的缩进,但它仍然返回相同的错误。只需将CORS过滤器添加到web.xml中,就解决了如何访问和编辑web.xml文件的问题?谢谢
files:
"/etc/httpd/conf.d/cors.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
        <Location "/">
            Header set Access-Control-Allow-Origin: *
            Header set Access-Control-Allow-Methods: "POST, GET, PUT, DELETE, OPTIONS"
            Header add Access-Control-Allow-Headers: "Authorization, Content-Type, Accept"
            Header set Access-Control-Allow-Credentials: true

            SetOutputFilter DEFLATE
        </Location>
.
├── app.war
├── .ebextensions
│   ├── add_cors.config.yaml
├── META-INF
│   ├── …
└── WEB-INF
    ├── classes
    │   └── …
    ├── servlet.xml
    ├── lib
    │   ├── …
    └── web.xml
  <!-- ================== CORS FILTERS ===================== -->
  <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>
    <init-param>
      <param-name>cors.allowed.methods</param-name>
      <param-value>GET,POST,HEAD,OPTIONS</param-value>
    </init-param>
    <init-param>
      <param-name>cors.allowed.headers</param-name>
      <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
    </init-param>
    <init-param>
      <param-name>cors.exposed.headers</param-name>
      <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
      <param-name>cors.support.credentials</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>cors.preflight.maxage</param-name>
      <param-value>10</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>