繁体   English   中英

Spring Boot,Angular2,跨域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM