CORS(跨域资源共享)

1. 简介

  • 跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。(引自:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

  • CORS, 即 Cross Origin Resource Sharing,表示控制脚本从一个域请求另一个域(URL不同,包括端口不同)的资源。

  • 出于安全原因,浏览器会限制发起、或接收此类请求。

  • 需要进行相应的配置,以允许对跨域资源的访问。

2. Spring 相关配置

(1). 配置 Controller

@RestController
public class MainController {

    @CrossOrigin
    @GetMapping("/")
    public String index(){
        return "hello world!";
    }
}
1
2
3
4
5
6
7
8
9

(2). 在 Spring MVC 中全局配置

@Configuration
@EnableWebMvc
public class MVCConf implements WebMvcConfigurer {

    public void addCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")
                .allowedOrigins("*")  //全部允许
                .allowedHeaders("*")  //全部允许
                .allowedMethods("GET", "POST", "DELETE")
                .allowCredentials(false)
                .maxAge(3600);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

(3). 配置 Spring Web Security 启用 CORS

@Configuration
@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.cors().and() //启用 CORS 
            .csrf().disable() //禁用 CSRF
            //......
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource(){
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("GET", "POST"));
        configuration.setAllowedHeaders(Arrays.asList("*"));

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

        return source;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

3. 参考文档

最近更新: 8/19/2019, 10:52:28 PM