interview
springboot
SpringBoot如何处理跨域请求(CORS)?

SpringBoot面试题, Spring Boot 如何处理跨域请求CORS?

SpringBoot面试题, Spring Boot 如何处理跨域请求CORS?

QA

Step 1

Q:: Spring Boot 如何处理跨域请求(CORS)?

A:: 在 Spring Boot 中,可以通过使用 @CrossOrigin 注解来处理跨域请求。这可以在控制器类或方法上使用,指定允许的域名、方法、头信息等。例如:

 
@CrossOrigin(origins = "http://example.com")
@GetMapping("/example")
public String example() {
    return "example";
}
 

另外,还可以通过全局配置来处理跨域请求,使用 WebMvcConfigurer 的 addCorsMappings 方法来定义全局的跨域策略:

 
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}
 

Step 2

Q:: 为什么需要处理跨域请求?

A:: 在 Web 开发中,浏览器出于安全考虑,默认会阻止从一个域名向另一个域名发起的请求(即跨域请求)。这称为同源策略 (Same-Origin Policy)。但在实际开发中,我们经常需要从不同的域名或端口请求资源,例如在前后端分离的架构中,前端和后端通常运行在不同的域名或端口下。这时候就需要处理跨域请求(CORS),以允许合法的跨域请求。

Step 3

Q:: Spring Boot 如何全局配置 CORS?

A:: 可以通过实现 WebMvcConfigurer 接口并覆盖 addCorsMappings 方法来全局配置 CORS。示例如下:

 
@Configuration
public class MyCorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}
 

这个配置允许来自 http://example.com 的请求,并允许所有方法(GET、POST、PUT、DELETE),还允许所有的请求头,并且支持凭证(如 cookies)。

Step 4

Q:: CORS 的基本原理是什么?

A:: 跨域资源共享(CORS, Cross-Origin Resource Sharing)是浏览器的一种机制,通过设置 HTTP 头的方式,允许服务器声明哪些来源是被允许访问资源的。具体来说,浏览器在发起跨域请求时,会首先发出一个预检请求(OPTIONS),服务器返回允许的域、方法和头信息等,浏览器根据服务器返回的信息决定是否继续发送实际请求。

用途

跨域请求是前后端分离项目中经常遇到的场景。在实际生产环境中,处理 CORS 是非常重要的,特别是在开发 Web 应用时。通过合理的 CORS 配置,可以确保前端能够正确地与后端通信,而不会因为浏览器的同源策略而导致请求被阻止。因此,了解如何配置和处理 CORS 是 Java 开发者,特别是 Spring Boot 开发者必须掌握的技能。面试官通过询问这类问题,可以考察候选人对 Web 安全和应用架构的理解,以及实际动手能力。\n

相关问题

🦆
什么是同源策略?

同源策略(Same-Origin Policy)是一种重要的安全机制,用于限制从一个源加载的脚本如何与另一个源的资源进行交互。它定义了 '源' 是由协议、域名和端口组成的组合。只有当两个 URL 拥有相同的协议、域名和端口时,才认为它们属于同一个源。该策略主要用于防止恶意网站获取敏感数据。

🦆
如何在 Spring Boot 中处理跨域的 Preflight 请求?

Preflight 请求是浏览器在发出某些跨域请求前,首先发出的一个 HTTP OPTIONS 请求,以确定目标服务器是否允许该实际请求。Spring Boot 中可以通过配置 addCorsMappings 方法来处理 Preflight 请求。在 CorsRegistry 中配置 allowedMethods 来指定支持的 HTTP 方法,允许浏览器继续后续的实际请求。

🦆
如何在 Spring Security 中配置 CORS?

在 Spring Security 中,CORS 配置可以通过 http.cors() 方法来实现。首先,需要定义一个 CorsConfigurationSource Bean,配置 CORS 规则,然后在 Security 配置类中启用 CORS 支持。例如:

 
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable();
        // 其他配置...
    }
 
    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://example.com"));
        configuration.setAllowedMethods(Arrays.asList("GET", "POST"));
        configuration.setAllowedHeaders(Arrays.asList("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/api/**", configuration);
        return source;
    }
}