ThingWorx 跨域问题has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present...

本文介绍了如何解决在访问部署在公司服务器上的ThingWorxPlatform时遇到的跨域问题。通过编辑thingworx安装目录下的Apache Tomcat的web.xml文件,添加CORS过滤器并配置相关参数,以及对OPTIONS请求的处理,可以实现跨域访问。最后提供了一个简单的测试HTML页面来验证接口调用是否成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍ThingWorx Platform平台接口如何访问,出现跨域问题如何解决。参考官方文章CS229450 - How to Enable Cross-Origin Resource Sharing (CORS) in Apache Tomcat for ThingWorx Platform/ThingWorx Navigate

背景

公司服务器部署了一台 ThingWorx Platform,现在另一个系统要调用thingworx中开放的api接口(thingworx如何写api接口可参考官网),访问时浏览器提示错误:

很明显是跨域问题 ,解决方案见下面步骤:

解决方案

1、找到thingworx安装目录下的tomcat下web.xml文件:<Apache Tomcat Install>\webapps\Thingworx\WEB-INF\ ,在 </session-config> 行后面新增

<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>OPTIONS,GET,POST,HEAD,PUT,DELETE</param-value>
    </init-param>
	<init-param>
		<param-name>cors.allowed.headers</param-name>
		<param-value>Authorization,appKey,x-thingworx-session,Content-Type,X-Requested-With,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>false</param-value>
	</init-param>
	<init-param>
		<param-name>cors.preflight.maxage</param-name>
		<param-value>10</param-value>
	</init-param>
	<init-param>
		<param-name>cors.request.decorate</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>

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

cors.allowed.origins的值可以设置为指定域访问,如有多个用英文逗号分隔,允许所有域访问设置为*,这里直接设置为*。

2、ThingWorx Platform 8.5 及更高版本开始,还需要注释掉以下与OPTIONS相关的块:

  <!-- <security-constraint>
    <web-resource-collection>
      <web-resource-name>Forbidden</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>HEAD</http-method>
      <http-method>OPTIONS</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint> -->

3、保存web.xml文件,重启Apache Tomcat。

完成以上步骤,thingworx已经放开 了跨域限制,只需要调用即可,可以测试下,测试html如下

<html>
  <head>
  <meta charset="utf-8"/>
	<script>
		function httpFunction()
		{
			const theUrl = "thingworx API地址";
			var xmlHttp = new XMLHttpRequest();
			xmlHttp.open( "POST", theUrl, false ); // false for synchronous request
			xmlHttp.setRequestHeader("Content-type", "application/json");
			xmlHttp.setRequestHeader("Accept","application/json");
            xmlHttp.setRequestHeader("appKey","thingworx上面申请的key");
			xmlHttp.send();
			alert(xmlHttp.responseText)
			return xmlHttp.responseText;
		}
	</script>
	<script>
	function myFunction() {
	  alert("Click me Test!");
	}
	</script>

  </head>
  <body>
	  <button onclick="httpFunction()">Click me</button> 
	  <button onclick="myFunction()">Click me Test</button> 
  </body>
</html>

这个错误信息说明在发送请求时,服务器返回的响应头中没有包含Access-Control-Allow-Origin字段,导致浏览器拒绝接受该响应。这是由于访问(Cross-Origin Resource Sharing,CORS)的限制所引起的。 为了解决这个问题,可以添加一个名为CorsConfig的配置类,其中配置了允许访问的规则。具体做法是使用addCorsMappings方法将允许访问的规则添加到CorsRegistry中,可以设置allowedOriginPatterns为"*",表示允许来自所有的请求;allowedHeaders设置为CorsConfiguration.ALL,表示允许所有请求头;allowedMethods设置为CorsConfiguration.ALL,表示允许所有请求方法;allowCredentials设置为true,表示允许发送身份验证信息;maxAge设置为3600,表示设置响应缓存的最大时间。通过这个配置类,服务器会在响应头中添加Access-Control-Allow-Origin字段,从而允许访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [has been blocked by CORS policy: NoAccess-Control-Allow-Originheader is present on the ...](https://blog.csdn.net/qq_45800640/article/details/118422632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [corsyusha:简单快速的代理,可在针对现有API进行原型设计时绕过CORS问题,而不必担心CORS](https://download.csdn.net/download/weixin_42176612/18261495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [解决前后端报错:has been blocked by CORS policy: NoAccess-Control-Allow-Origin](https://blog.csdn.net/wsaicyj/article/details/127814374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值