在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.properties
或application.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
注解。