【发布时间】:2017-01-31 10:01:57
【问题描述】:
这是我的网络配置
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
我有一个/health 端点,它返回一些健康数据并且工作正常。
这里是junit测试
@Test
public void corsTest() {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.ORIGIN, "http://localhost:9000");
HttpEntity<?> requestEntity = new HttpEntity(headers);
ResponseEntity<Status> entity = this.restTemplate.exchange("/health", HttpMethod.GET, requestEntity, Status.class);
assertEquals(HttpStatus.OK, entity.getStatusCode());
assertEquals("http://localhost:9000", entity.getHeaders().getAccessControlAllowOrigin()); //6
Status health = entity.getBody();
assertThat(health.getAppName()).isEqualTo(appName);
}
测试在第 6 行失败。如果注释掉该行,则测试通过。
通过调试器,我发现entity.getHeaders().getAccessControlAllowOrigin() 为空。我使用这个sample app 作为参考,它工作正常。但对于我的应用程序它失败了。
当我使用 javascript 调用 /health api 时,我可以看到 cors 工作。如果我注释掉 webConfig 类,我会在 javascript 中得到错误。在 javascript 上调试更多显示未设置 cors 响应标头,但启用 webconfig 时请求成功服务。
所以绝对 cors 有效。失败的是测试。所以我猜由于我不知道的原因,测试没有看到它。
【问题讨论】:
-
CORS 只适用于 AJAX 请求,所以写一个模拟 JAVA 客户端的测试很奇怪。
-
@zeroflagL:我也有同感。但是我上面给出的链接是用java编写的。所以我试图模仿它
标签: spring spring-mvc spring-boot cors spring-mvc-test