[英]Spring Boot, Angular2, Cross-origin
我在Spring Boot中有一个Web服务器。 我可以向它发送HTTP请求,并从“发送HTTP”之类的工具中获取答案。 我也有一个基于Angular2 whoich的网站。 部分功能必须包含从Chrome中运行的Angular2到Spring Boot服务器的HTTP请求。 每次执行此操作时,Chrome控制台都会出现错误:
XMLHttpRequest无法加载“ URL服务器”。 所请求的资源上没有“ Access-Control-Allow-Origin”标头。 因此,不允许原始“ URL客户端”访问 。
我在所有有意义的地方都放入了Spring服务器@CrossOrigin:在@ Controller,@ RequestMapping,@ GetMapping之前,但这没有帮助。 我缺少什么以及如何克服? 非常感谢,有点拼命,李维
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
试试这个对我有用!
尝试如下:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("<<MAPPING>>").allowedOrigins("<<ORIGINS>>");
}
};
}
请仔细阅读以下教程,如果仍然无法使用,请尝试使用其他选项:
https://spring.io/guides/gs/rest-service-cors/
更新1:
由@Levi更新
import org.springframework.web.cors.CorsConfiguration; //+ more public class RestConfiguration {
@Bean public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source); }
}
您需要为应用程序添加CQRSFilter并在spring boot配置类中设置该CORSFilter。
你要做的是
1>创建自己的实现过滤器的CQRSFilter
2>您应在过滤器中添加以下代码
@Component
public class CORSFilter implements Filter{
static Logger logger = LoggerFactory.getLogger(CORSFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(request, response);
}
public void destroy() {}
}
3>将过滤器放入spring配置文件
@EnableWebMvcSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class)
}
}
您需要按此处所述设置后端代理。
1)使用内容创建文件proxy.conf.json(package.json的下一个)
{
"/api": {
"target": "http://localhost:8080",
"secure": false
}
}
2)在package.json中编辑启动脚本
"start": "ng serve --proxy-config proxy.conf.json"
3)运行
npm start
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.