我已经创建了一个有角度的6应用程序,并将其作为静态Web托管部署在AWS S3存储桶上。 从后端,我创建了一个Spring Boot应用程序,该应用程序公开了其余服务,并在CroosOrigin的控制器和方法级别上进行了注释。它还部署在AWS tomcat EC2实例上。
当我尝试单击angular应用程序中的按钮时,它将尝试调用已部署的spring rest Web服务。在控制台上,我获得了CORS策略:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态。
当我尝试通过邮递员致电这些服务时,它工作正常。我在Chrome中添加了用于CORS的Chrome扩展程序。
当我尝试从angular应用程序调用相同服务时,任何人都可以帮助我为什么它不起作用。
谢谢。
答案 0 :(得分:1)
尝试将此类过滤器类添加到您的Spring Boot应用程序中:
@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, Connection, User-Agent, authorization, sw-useragent, sw-version");
// Just REPLY OK if request method is OPTIONS for CORS (pre-flight)
if ( req.getMethod().equals("OPTIONS") ) {
res.setStatus(HttpServletResponse.SC_OK);
return;
}
filterChain.doFilter(request, response);
}
@Override
public void destroy() {}
}
答案 1 :(得分:1)
在Spring Boot中,可以启用全局CORS
来声明@Configuration
类CorsConfig
类,并使用覆盖WebMvcConfigurer
的定义@Bean addCorsMappings
>
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins("*")
.allowedHeaders("*");
}
};
}
}
或使用工具MvcConfig
定义一个WebMvcConfigurer
类,然后覆盖addCorsMappings
。如下所示:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins("*")
.allowedHeaders("*");
}
};
}
}