Spring Boot解决前端携带自定义Header时的跨域问题

浏览器在携带自定义Header实现跨域访问时,会首先发送一个OPTIONS请求确认是否可以携带此Header进行访问。

image

浏览器在收到服务器的返回结果后决定是否携带自定义的Header,所以需要在服务器配置中允许该请求头的存在并返回相应的响应头信息。

在拦截器或过滤器里面加上允许的Header信息,并返回正确的响应头信息给浏览器,使其能够成功携带自定义Header进行跨域访问。

例如使用拦截器,则只需要在最外层拦截器的afterCompletion里增加如下代码:

response.setHeader("Access-control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
response.setHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
//携带自定义header时需要辨别是否是OPTIONS请求,如果是则直接返回204
if(request.getMethod().equalsIgnoreCase("OPTIONS")) {
      response.setStatus(204);
}

image

如果还是不行,则可能忘了在对应的controller上加上 @CrossOrigin注解。