1

我们尝试从 Angular 5 应用程序调用 REST API,这些 API 被设计并部署在 EI 上作为 .car 文件,但是,当我们启动 Angular 应用程序时,由于No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://10.5.222.34:9763' is therefore not allowed access.. 我们尝试添加 CORS 过滤器,<EI_HOME>/conf/tomcat/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>

谁能帮我找出问题所在以及如何解决?并提前感谢您。
我要求的代码是:
从角度来看是一个普通的 HTTP POST 客户端调用,但是,浏览器发送两个请求,第一个作为 OPTIONS 来检查服务器是否会接受原始请求(POST 请求),第二个是原来的 POST 。
从EI方面:

<api context="/cmbassadmin/authentication" name="authentication" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="OPTIONS POST" uri-template="/login">
        <inSequence>
            <sequence key="InitiateCMBASSADMINAuthenticationSQ"/>
            <header name="Access-Control-Allow-Origin" scope="transport" value="*"/>
            <header name="Access-Control-Allow-Methods" scope="transport" value="GET,PUT,POST,DELETE,PATCH,OPTIONS"/>
            <header name="Access-Control-Allow-Headers" scope="transport" value="*"/>
            <header name="Content-Type" scope="transport" value="text/html;charset=utf-8"/>
            <property name="Access-Control-Allow-Origin" scope="transport" type="STRING" value="*"/>
            <property name="Access-Control-Allow-Methods" scope="transport" type="STRING" value="GET,PUT,POST,DELETE,PATCH,OPTIONS"/>
            <property name="Access-Control-Allow-Headers" scope="transport" type="STRING" value="*"/>
            <filter regex="OPTIONS" source="get-property('REST_METHOD')">
                <then>
                   <log>
                      <property name="message" value="in the preflight"/>
                   </log>
                   <respond/>
                </then>
                <else/>
            </filter>
            <log>
                <property expression="get-property('uri.var.username')" name="uri.var.username"/>
            </log>
            <call-template target="audit_trail">
                <with-param name="user_name" value="{get-property('uri.var.username')}"/>
                <with-param name="action_name" value="Login"/>
                <with-param name="description" value="Login to the xyz admin app"/>
            </call-template>
            <sequence key="AuthenticateWithIS_SQ"/>
            <loopback/>
        </inSequence>
        <outSequence>
            <header name="Access-Control-Allow-Origin" scope="transport" value="*"/>
            <header name="Access-Control-Allow-Methods" scope="transport" value="GET,PUT,POST,DELETE,PATCH,OPTIONS"/>
            <header name="Access-Control-Allow-Headers" scope="transport" value="*"/>
            <header name="Content-Type" scope="transport" value="text/html;charset=utf-8"/>
            <property name="Access-Control-Allow-Origin" scope="transport" type="STRING" value="*"/>
            <property name="Access-Control-Allow-Methods" scope="transport" type="STRING" value="GET,PUT,POST,DELETE,PATCH,OPTIONS"/>
            <property name="Access-Control-Allow-Headers" scope="transport" type="STRING" value="*"/>
            <send/>
        </outSequence>
        <faultSequence>
            <send/>
        </faultSequence>
    </resource>
</api>
4

2 回答 2

0

当我们在 /conf/tomcat/web.xml 中定义 cors 过滤器时,过滤器将应用于 tomcat servlet 端口,默认为 9443。如果您使用直通传输端口调用您的 API(例如:默认情况下为 8280 和 8243),则响应中不会出现所需的“Access-Control-Allow-Origin”等标头。您可以尝试使用 servlet 端口调用您的 API 吗?

例如:https://hostname:9443/cmbassadmin/authentication/login

有关更多详细信息,请参阅

于 2019-07-20T03:43:37.250 回答
0

尝试在将响应发送回 Angular 的发送或响应中介之前添加以下属性。

<property name="Access-Control-Allow-Origin" scope="transport" type="STRING" value="*"/>
<property name="Access-Control-Allow-Methods" scope="transport" type="STRING" value="GET,PUT,POST,DELETE,PATCH,OPTIONS"/>
<property name="Access-Control-Allow-Headers" scope="transport" type="STRING" value="Authorization,Access-Control-Allow-Origin,Content-Type"/>

您可以根据需要修改属性。

于 2018-02-27T13:34:58.307 回答