No 'Access-Control-Allow-Origin' header is present on the requested resource.
·
(1)错误描述:这是在做前后端分离项目跨域时候遇到的,错误的大致意思是没有Access-Control-Allow-Origin 这个头。
Access to XMLHttpRequest at 'http://***.***.**.com/**/**?fromDate=&toDate=¤tPage=1&pageSize=100'
from origin 'http://beta.***.com' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
(2)问题解决:需要在filter里面把这个头设置进去:
response.setHeader("Access-Control-Allow-Origin", currentOrigin);
后台filter完整代码:
@Slf4j
@WebFilter(urlPatterns = {"/*"}, filterName = "corsFilter")
public class CorsFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(IsvSearchController.class);
private String allowOrigin = "http://***.**.com,http://***.**.com:8080,http://***.**.com";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info("doFilter start ...");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (StringUtils.isNotEmpty(allowOrigin)) {
List<String> allowOriginList = Arrays.asList(allowOrigin.split(","));
if (!CollectionUtils.isEmpty(allowOriginList)) {
String currentOrigin = request.getHeader("Origin");
if (allowOriginList.contains(currentOrigin)) {
response.setHeader("Access-Control-Allow-Origin", currentOrigin);
}
}
}
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "content-Type");
if (HttpMethod.OPTIONS.name().equalsIgnoreCase(request.getMethod()) &&/*options 请求返回允许跨域的头*/
request.getHeader(HttpHeaders.ORIGIN) != null) {
logger.info("doFilter options request");
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)