Spring Boot 框架中实现跨域访问的五种解决方案,你懂了吗?
在Spring Boot中实现跨域访问可以通过以下五种方式:
- 通过CorsFilter
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
- 通过@CrossOrigin注解
在Controller或者RestController的方法上使用@CrossOrigin注解,例如:
@RestController
public class MyController {
@CrossOrigin
@GetMapping("/myEndpoint")
public String myEndpoint() {
// ...
}
}
- 全局配置
在Spring Boot的application.properties或application.yml中添加以下配置:
# application.properties
spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
spring.cors.allowed-origins=http://domain2.com
spring.cors.allowed-methods=GET, POST, PUT
spring.cors.allowed-headers=Content-Type
spring.cors.exposed-headers=Content-Range
spring.cors.allow-credentials=true
- 自定义配置类
创建一个配置类,实现WebMvcConfigurer接口,并重写addCorsMappings方法:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://domain2.com")
.allowedMethods("GET", "POST", "PUT")
.allowedHeaders("Content-Type")
.exposedHeaders("Content-Range")
.allowCredentials(true);
}
}
- 使用FilterRegistrationBean
创建一个CorsFilter的实例,并使用FilterRegistrationBean将其注册到Spring Boot的过滤器链中:
@Bean
public FilterRegistrationBean<CorsFilter> simpleCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
以上五种方法可以实现Spring Boot中的跨域访问控制。选择哪种方法取决于具体的应用场景和需求。
评论已关闭