代码之家  ›  专栏  ›  技术社区  ›  Nitin

访问控制中的多个IP允许源站不工作

  •  1
  • Nitin  · 技术社区  · 7 年前

    我的API服务器运行在端口8090上的SpringBoot应用程序中,前端应用程序运行在Angular6中。 在访问控制中只有一个IP允许原始头段之前,一切都正常工作。

    现在,API由运行在不同端口(80和7000)上的两个不同的字体终端应用程序使用。我在访问控制中添加了两个IP允许原始头,但它不工作

    按照 this 我们可以有多个cors源代码,用逗号分隔

    细节:

    Request:
    
    Accept: /
    Accept-Encoding: gzip, deflate
    Accept-Language: en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7
    Access-Control-Request-Headers: content-type,x-auth
    Access-Control-Request-Method: GET
    Cache-Control: no-cache
    Connection: keep-alive
    Host: 192.168.1.10:8090
    Origin: http://192.168.1.10:7000
    Pragma: no-cache
    Referer: http://192.168.1.10:7000/user/dashboard
    
    Response:
    
    Access-Control-Allow-Headers: X-Auth,Origin,X-Requested-With,Content-Type,Accept,X-Forwarded-For
    Access-Control-Allow-Methods: GET,POST,OPTIONS,PUT,DELETE
    Access-Control-Allow-Origin: http://192.168.1.10,http://192.168.1.10:7000
    Access-Control-Expose-Headers: X-Auth
    Content-Length: 0
    Date: Fri, 01 Feb 2019 05:54:29 GMT
    
    Error: 
    
    Access to XMLHttpRequest at 'http://192.168.1.10:8090/api/patient/logout' from origin 'http://192.168.1.10:7000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values 'http://192.168.1.10,http://192.168.1.10:7000', but only one is allowed.
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   Sunil Kanzar    7 年前

    在大多数情况下 this 是有效的,但是当您在应用程序中有一个请求过滤器时,您需要为此编写代码:

        String origin = request.getHeader("Origin");
        if (StringUtils.isNoneBlank(origin)) {
            if (applicationSettings.getAllowedOrigins().contains("*") || applicationSettings.getAllowedOrigins().contains(origin)) {
                response.setHeader("Access-Control-Allow-Origin", origin);
            }
        } else {
            response.setHeader("Access-Control-Allow-Origin", "*");
        }
    
        2
  •  1
  •   kj007 XdebugX    7 年前

    下面应该允许在SpringBoot端有多个来源:

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("http://192.168.1.10:8090","http://192.168.1.10:7000");
        }
    }