【问题标题】:Spring CorsFilter CorsConfiguration Allow Multiple originsSpring CorsFilter CorsConfiguration 允许多个来源
【发布时间】:2022-07-07 14:20:51
【问题描述】:

我在 spring 项目中工作,我想允许多个来源调用我的后端 API。 到目前为止,我的配置仅适用于一个来源。这是我的代码:

  @Bean
  public CorsFilter corsFilter() {

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();

    config.addAllowedOriginPattern("myoriginone");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    return new CorsFilter(source);
  }

您知道我如何允许多个来源吗?类似于 "host1","host2".. 因为 addAllowedOriginPattern() 方法只接受一个字符串参数。

问候。

【问题讨论】:

标签: spring spring-boot spring-security


【解决方案1】:

如果您查看文档,allowedOrigins 是一个数组。

@Nullable
private List<String> allowedOrigins;

下面的方法是设置允许的Origins。显然,您可以多次调用该方法来添加不同的来源。

    /**
     * Add an origin to allow.
     */
    public void addAllowedOrigin(String origin) {
        if (this.allowedOrigins == null) {
            this.allowedOrigins = new ArrayList<>(4);
        }
        else if (this.allowedOrigins == DEFAULT_PERMIT_ALL) {
            setAllowedOrigins(DEFAULT_PERMIT_ALL);
        }
        this.allowedOrigins.add(origin);
    }

使用下面的

public void setAllowedOrigins(@Nullable List<String> allowedOrigins) {
        this.allowedOrigins = (allowedOrigins != null ? new ArrayList<>(allowedOrigins) : null);
    }

【讨论】:

    【解决方案2】:

    环境变量是更好的做法。添加多个来源。将变量放在application.properties 文件中

    regions=http://localhost:8080, http://localhost:8081, http://a.b.c.d, http://localhost:9000
    

    像这样创建一个全局变量

    @Value("${regions}")
    private String[] allowedOrigins;
    

    现在称之为

     @Override
     public void addCorsMappings(CorsRegistry registry)
     {
         registry.addMapping("/**").allowedOrigins(allowedOrigins);
     }
    

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 2010-12-11
      相关资源
      最近更新 更多