先描述一下我们项目的情况
项目是前后端分离项目,后端是Springboot应用,公司要求不用Springboot内置的web容器Tomcat,需要使用中国自主研发的金蝶天燕中间价产品:Apusic应用服务器,首先呢对后台项目改造,改造可以参考:
发现问题
改造完后,把项目打成war包,然后部署到金蝶的Apusic应用服务器上,启动成功,然后我用postman对接口进行测试访问,一切正常,访问的很愉快,接口正常。最后我想着前后端联合起来测试一下,在页面上点点看看是不是正常的,这样一搞问题就出来了,在页面上访问接口相应Status为:net::ERR_EMPTY_RESPONSE,如下图
按照字面的意思应该是错误空响应,我一开始也是一脸懵逼,明明接口都是有响应的,而且我用postman访问接口非常的愉快的,正常的,为什么到这里就不行了,纳闷
提示:
在项目打包部署到金蝶应用服务器的时候,可能会报各种错,毕竟web服务器换了,和Tomcat有不一样的地方,这里只能按照具体的任务具体解决,像我的项目就出现了一个事务的问题,还有一个定时任务的问题
问题分析
这postman可以访问接口,在网页就不行,首先服务启动是没有问题的,后来走了挺多弯路的,猜可能是跨域的问题,但是项目明明有配置跨域的,,,,,然后我去找了金蝶的技术支持人,他把Apusic应用服务器上的跨域配置发给我了,按照这个配置一下,果然问题就解决了,哈哈哈哈,
这里我吐槽一下,对应这种产国化应用服务器,应用的不是很广泛,而且也没有什么社区,在网上搜到的资料不多,遇到问题最好就是找到官方人员解决一下
跨域配置如下:
主要修改如下
1、 修改domains/mydomain/config/vm.options 取消一部分访问限制
apusic.http.disabledMethods=
2、 配置conf/web.xml 添加跨域filter配置
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.apusic.util.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,PUT, DELETE,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Accept,Origin,X-Requested-With,tokenId,Content-Type,Last-Modified,lang,entCode,x-form-id</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
测试是否解决跨域问题,如果未解决,去掉第二部修改的配置参考第三步
3、应用添加跨域过滤器,添加到@Configuration注解的配置类中 如果不是springboot项目,百度所有相关的配置加入跨域过滤器配置
import org.springframework.web.filter.CorsFilter;
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("");
corsConfiguration.addAllowedHeader("");
corsConfiguration.addAllowedMethod("*");
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(source);
}
到这里问题就解决了,搞了我两天,哎,记录一下,希望可以帮助有需要的人