问题
联调接口时,报了一个以下错误:
Access to XMLHttpRequest at 'http://localhost:8299/login'
from origin 'http://localhost:3000' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' header is
present on the requested resource.
本人以为是我没有设置跨域,可查看实现 WebMvcConfigurer 接口的 addCorsMappings 函数中设置了跨域:
registry.addMapping("/**")
.allowedHeaders("*")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH", "OPTIONS", "HEAD")
.maxAge(3600 * 24);
有点无解。
原因
通过后端debugger,发现在继承HandlerInterceptorAdapter的 preHandle 函数拦截时,返回 false,导致了这个问题。
解决
在 preHandle 函数中,添加:
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
response.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
response.addHeader("Access-Control-Max-Age", "3600");