弹簧靴,棱角分明2,交叉原点



我在Spring Boot中有一个Web服务器。我可以向它发送HTTP请求,并从Send HTTP等工具获得答案。我还有一个基于Angular2的网站whoich也可以工作。部分功能必须包括从Chrome中运行的Angular2到Spring Boot服务器的HTTP请求。每次我这样做时,Chrome控制台中都会出现错误:

XMLHttpRequest 无法加载"URL Server"。请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"URL 客户端"。

我把 Spring 服务器@CrossOrigin放在所有有意义的地方:在@Controller之前、@RequestMapping、@GetMapping,但它没有帮助。我缺少什么以及如何克服?非常感谢,有点绝望,Levi

@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);
        }

试试这个它对我有用!

您需要为应用程序添加 CQRSFilter,并在 Spring 引导配置类中设置该 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)
  }
 }

尝试如下:

    @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); } 
}

您需要设置后端的代理,如此处所述。

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

相关内容

  • 没有找到相关文章

最新更新