Bootstrap

Spring Boot中实现跨域请求

在Spring Boot中实现跨域请求(CORS,Cross-Origin Resource Sharing)可以通过多种方式,以下是几种常见的方法:

1. 使用@CrossOrigin注解

在Spring Boot中,你可以在控制器或者具体的请求处理方法上使用@CrossOrigin注解来允许跨域请求。

在控制器上应用:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;

@CrossOrigin(origins = "http://localhost:3000") // 允许指定域的跨域请求
@RestController
public class MyController {
    // 控制器方法
}

在单个请求处理方法上应用:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping("/example")
    public String example() {
        return "Example Response";
    }
}

2. 全局配置CORS

如果你想要为你的整个应用程序配置CORS,可以在一个配置类中使用WebMvcConfigurer接口。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许跨域请求的所有路径
                .allowedOrigins("http://localhost:3000") // 允许的源
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法
                .allowedHeaders("*") // 允许的请求头
                .allowCredentials(true); // 是否允许发送Cookie
    }
}

3. 使用Spring Security配置CORS

如果你的应用程序使用了Spring Security,你需要在Spring Security配置中添加CORS配置。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and() // 启用CORS配置
            // 其他Spring Security配置...
            .authorizeRequests()
            .anyRequest().permitAll(); // 允许所有请求
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://localhost:3000");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

4. 应用CORS全局默认配置

如果你想要设置一些全局默认的CORS配置,可以在application.propertiesapplication.yml中添加以下配置:

# application.properties
spring.web.cors.allow-credentials=true
spring.web.cors.allowed-origins=http://localhost:3000
spring.web.cors.allowed-methods=GET,POST,PUT,DELETE
spring.web.cors.allowed-headers=*

或者在application.yml中:

# application.yml
spring:
  web:
    cors:
      allow-credentials: true
      allowed-origins: http://localhost:3000
      allowed-methods: GET,POST,PUT,DELETE
      allowed-headers: "*"

选择适合你需求的方法来配置CORS。如果你的应用程序需要处理来自多个源的请求,建议使用全局配置方法。如果只有特定的控制器或请求处理方法需要处理跨域请求,可以使用@CrossOrigin注解。

;