SpringBoot 如何解决跨域问题?
1. 使用 @CrossOrigin
注解
在Controller类或方法上使用@CrossOrigin
注解可以很容易地解决跨域问题。这是最简单和最直接的方法。
@RestController
@CrossOrigin(origins = "http://example.com") // 允许该域名的跨域访问
public class MyController {
@GetMapping("/some-resource")
public String someResource() {
return "Hello, World!";
}
}
2. 全局CORS配置
可以在Spring Boot应用中添加全局CORS配置。这通常通过实现WebMvcConfigurer
接口完成。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 对所有路径应用CORS配置
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("Header1", "Header2", "Header3")
.exposedHeaders("Header1", "Header2")
.allowCredentials(true).maxAge(3600);
}
}
3. 使用 CorsFilter
除了使用@CrossOrigin
和全局配置,还可以通过自定义CorsFilter
来解决跨域问题。
@Configuration
public class MyConfiguration {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://example.com");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
4. 使用 @ControllerAdvice
和 @ModelAttribute
在某些情况下,你也可以使用@ControllerAdvice
和@ModelAttribute
来全局处理请求和响应,从而手动设置CORS相关的HTTP头。
public class GlobalAdvice {
public void setCORSHeaders(HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Origin", "http://example.com");
// 其他CORS相关设置
}
}