当前位置: 首页 > 知识库问答 >
问题:

即使在服务器端设置了Cors配置,我仍然被CORS策略阻止:

时衡虑
2023-03-14

所以我已经实现了一个Spring引导JAVA应用程序作为服务器和角作为前端。所以实际上,当我在本地运行这些时,一切都很好。

但是当我为两者构建Docker映像并尝试将它们作为容器进行测试时,我面临着CORS错误。

由于我使用JWT令牌作为安全性,我已经禁用了crsf和默认的Spring Security令牌。所以在这里您可以看到CORS的JAVA配置;

private String url = "http://10.1.2.37:4200";
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().cors().configurationSource(new CorsConfigurationSource() {
    @Override
    public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowedOrigins(Collections.singletonList(url));
        config.setAllowedMethods(Collections.singletonList("*"));
        config.setAllowCredentials(true);
        config.setAllowedHeaders(Collections.singletonList("*"));
        config.setExposedHeaders(Arrays.asList("Authorization"));
        config.setMaxAge(1200L);
        return config;
    }}).and()
    .authorizeRequests()
    .antMatchers("/user").authenticated()
    .antMatchers(HttpMethod.GET, "/user").authenticated()
    .and().csrf().disable()
    .oauth2ResourceServer().jwt().jwtAuthenticationConverter(jwtAuthenticationConverter);
        http.headers().frameOptions().sameOrigin();

这就是nginx。形态

events{}
http {
    include /etc/nginx/mime.types;
    server {
        listen 80;
        server_name  10.1.2.37;
     
        root /usr/share/nginx/html;
        index index.html;
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
}

即使我尝试在同一网络中使用网络标志运行这些Docker映像,也无法解决问题。

如何运行docker图像?对于有角度的部分;

docker run  --network "project"  --name project_frontend -d -p 4200:80 project_front_end

用于后端;

docker run  --network "project"  -d --name project_backend -p 8080:80 project_backend

它们都已启动并正在运行。但问题是,当我打开浏览器进行测试时,我得到的是;

Access to XMLHttpRequest at 'http://10.1.2.37:8080/menu' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我快疯了。真的。任何帮助都将不胜感激。我在这里请求理解为什么会发生这种事。

共有1个答案

聂琨
2023-03-14

您配置了错误的允许来源。

源站请求标头指示导致请求的源站(方案、主机名和端口)。例如,如果用户代理需要请求包含在页面中的资源,或通过其执行的脚本获取的资源,那么页面的来源可能会包含在请求中。

这实际上意味着配置的允许来源必须与发出请求时出现在浏览器中的URL匹配。您将允许的来源配置为您的nginx IP,但您不是通过nginx IP访问前端,而是通过http://localhost:4200访问它,如错误消息所示。

更改允许的原点以反映:

private String url = "http://localhost:4200";

请注意,当Spring Security接收到一个不允许的来源时,它会用403拒绝请求,并且不会添加任何访问控制头*,因此您会收到最后一条错误消息。

此外,您可能希望将org.springframework.web.cors.DefaultCorsProczer的日志级别降低到DEBUG,以便它在看到不允许的源以进行调试时记录错误。

 类似资料:
  • 我的应用程序的客户端是.NET6,服务器端web API是.NET 4.8。当尝试访问服务器端时,浏览器控制台中会产生以下错误: CORS策略已阻止从源“https://localhost:34564”访问“https://localhost:12345/API/controller/method”进行提取:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透

  • 我有一个flask socketio服务器,运行在带有nginx的ubuntu上。我有一个客户端调用服务器。当我尝试呼叫服务器时,收到以下错误: 这是我对烧瓶的初始化: ... 这是我当前在nginx中的配置: 来自客户端对服务器的请求如下所示: 我尝试过: -添加允许CORS到位置/仅,以及两者-在烧瓶应用程序中删除/添加allow CORS origin。 有人能帮忙吗?

  • 我的网址不同。 错误: CORS策略阻止从https://url.example.com/b/478Lhttp://localhost:3000访问XMLHttpRequest:对预试请求的响应不通过权限改造检查:请求的资源上不存在访问控制允许起源标头。

  • 我有一个在Node开发的API。JS,打字稿听localhost:3001我有一个Angular的前端应用程序,打字稿听localhost:4200 我正在尝试使用ngx-image-cropper上传图像文件,将其转换为base 64,从前端到API。 当补丁(更新)http请求发送到API时,我得到: 访问位于'http://localhost:3001/member/10'从原点'http:

  • 访问位于“”的XMLHttpRequesthttp://localhost:8080/api/auth/signup“起源”https://mysuite.ru'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:飞行前请求不允许重定向。 通过nginx重定向 使现代化 请求标头: 加载项nginx: 还没有结果

  • 当我使用HTML2Canvas评估图像时,我得到了这个错误。 CORS策略阻止从来源“http://localhost:8080”访问位于“http://testdomain.com/storage/images/products/user_front.png”的映像:请求的资源上没有“Access-Control-Allow-Origin”标头。 下面是我的cors配置。 有人能帮我吗?