DOIFOR技术Spring基于Filter的跨域实现
DOIFOR技术Spring基于Filter的跨域实现

Spring基于Filter的跨域实现

技术

Spring实现跨域的方式有很多种,本文主要记录一下基于Filter的实现。

@Configuration
public class CorsConfiguration {

    @Bean
    public FilterRegistrationBean corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

此处有两点需要说明一下:

  1. allowCredentials设置为true时, allowedOrgin不可以设置为*;
  2. filter的执行顺序是按照order的从小到大的顺序执行,跨域过滤器一般是需要最先执行的,所以尽可能的设置小一些。注:可以设置负数

补充:
跨域请求XHR获取response header中的自定义字段会报:Refused to get unsafe header "XXX"。 这个时候需要在响应头中设置Access-Control-Expose-Headers。代码为:

configuration.addExposedHeader("xxx");

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注