【发布时间】:2017-01-17 14:24:48
【问题描述】:
我正在尝试使用 Spring 的 RestTemplate 发出跨域请求。通信是在两个 Spring-boot webapps 之间完成的,它们都运行在 localhost 但不同的端口上。我要做的是:
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setOrigin("http://localhost:8083");
httpHeaders.add("Authorization", token);
HttpEntity<Void> httpEntity = new HttpEntity<>(httpHeaders);
ParameterizedTypeReference<List<MyObj>> beanType = new ParameterizedTypeReference<List<MyObj>>() {};
ResponseEntity<List<MyObj>> list = restTemplate.exchange(serviceURL, HttpMethod.GET, httpEntity, beanType);
调用被执行,“Authorization”标头通过就好了,但无论我尝试什么,接收端都没有“Origin”标头。 当我使用其他工具(SoapUI、RestClient Chrome 插件等)创建类似请求时,标头会按照我提供的方式传递。
为了在接收端打印所有标题,我使用了 javax.servlet.Filter 的实现:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
log.info(headerName + ": " + request.getHeader(headerName));
}
}
为什么使用RestTemplate时没有传递origin header?
【问题讨论】:
标签: java spring spring-mvc resttemplate