2

我有两台服务器,都由我控制。一个是thingworx 服务器,它与另一个windchill 服务器通信,并显示我的网页。我有一个与 windchill 服务器对话的thingworx mashup。它从 Windchill 服务器中提取图像和 pdf,并允许混搭操作员更改图像或 pdf,然后将其放回服务器上。我解决了从服务器提取图像时出现的 CORS 问题,但现在我在 POST 到服务器时遇到了 CORS 错误。

我尝试将 CORS 过滤器放在 thingworx 服务器上,但没有任何乐趣。我不得不告诉脚本将图像作为跨域拉取,所以我认为也有一些适当的方法来请求跨域 POST。

$.ajax({
    method: 'POST',
    url: urlString,
    enctype: 'multipart/form-data',
    processData: false,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST', 
    data: fd
    //crossOrigin: true
}).done(function(data) {
    console.log('success', data) 
});

在 chrome 中关闭 CORS 检查时效果很好。

4

1 回答 1

0

对于 Windchill 的当前版本,您可以按照以下 PTC 文章配置 CORS:https: //support.ptc.com/help/wnc/r12.0.0.0/en/#page/Windchill_Help_Center%2FFileVaultConfigWCforCORS.html%23

这需要在 Windchill 的 Tomcat 配置中设置 CORS 过滤器。

您似乎正在尝试将内容移出或移入 Windchill 服务器,因此我相信上面的文章应该适用于此用例。

步骤总结:

使用以下过程配置 CORS 过滤器以允许跨域 http 请求。此配置适用于 Windchill 主站点和文件服务器站点。

  1. 导航到 <Windchill_Home>\codebase\WEB-INF\web.xml。
  2. 使用以下 ContentCorsFilter 和 ContentHttpHeaderSecurityFilter 以及映射配置更新 web.xml 文件:
<filter>
    <filter-name>ContentCorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>[ALLOWED_ORIGINS]</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.allowed.methods</param-name>
        <param-value>GET,POST,OPTIONS</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With</param-value>
    </init-param>
</filter>
<filter>
    <filter-name>ContentHttpHeaderSecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>ALLOW-FROM</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingUri</param-name>
        <param-value>[ALLOWED_ORIGINS]</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>ContentCorsFilter</filter-name>
    <url-pattern>/servlet/WindchillAuthGW/wt.content.ContentHttp/viewContent/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.master.StandardMasterService/doDirectDownload/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.replica.StandardReplicaService/doDownload/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.replica.StandardReplicaService/doIndirectDownload/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>ContentHttpHeaderSecurityFilter</filter-name>
    <url-pattern>/servlet/WindchillAuthGW/wt.content.ContentHttp/viewContent/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.master.StandardMasterService/doDirectDownload/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.replica.StandardReplicaService/doDownload/*</url-pattern>
    <url-pattern>/servlet/WindchillAuthGW/wt.fv.replica.StandardReplicaService/doIndirectDownload/*</url-pattern>
</filter-mapping>

使用逗号分隔列表将 cors.allowed.origin 和 antiClickJackingUri 参数更新为所需的网址。不要使用星号 (*),因为 cors.support.credentials 需要为 true。

  1. 保存 web.xml 文件。
  2. 重新启动 Windchill 服务器。

请始终使用最新的 PTC 技术支持和帮助文章获取最新信息,因为这些步骤可能会发生变化。

于 2020-10-16T12:48:13.497 回答