- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
7天前关闭。
Improve this question
以前,我们的内部网Java17/Angular11应用程序在SpringBoot 2.7和Azure上运行良好。升级到SB 3.0后,当我尝试在Azure环境中对应用程序进行REST调用时,我现在收到如下CORS策略/访问错误。
注:这些CORS错误不是本地发生的。
CORS策略已阻止从源"https://xxxxxxxxx"访问位于"https://xxxxxxx"的XMLHttpRequest:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头。
我尝试了许多解决方案,最近的一个是自定义CORS过滤器,如下所示:
@Component
public class CorsFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(CorsFilter.class);
public CorsFilter() {
log.info("lCORSFilter init");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
除了在每个@RestController上使用@CrossOrigin标注(如下图所示)之外
@CrossOrigin(origins = { "*" }, maxAge = 4800, allowCredentials = "false")
@RestController
@RequestMapping("/hello")
我们使用的是JDK 17.0.5,我遗漏了什么?
1条答案
按热度按时间u0sqgete1#
这个问题可以关闭。问题是下游Azure环境还没有在JDK17上。我做了几次尝试,在我让管理员迁移到JDK17后,结果工作正常