springboot跨域是什么
时间: 2024-12-31 07:29:55 浏览: 12
### Spring Boot 中跨域的概念
跨源资源共享 (CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器允许一个域上的 Web 应用程序访问另一个域上的选定资源。出于安全原因,默认情况下不允许这种行为。
当客户端发起 AJAX 请求到不同域名下的服务器端时,如果未正确配置 CORS,则会触发同源策略错误并阻止请求成功完成。为了使这些类型的请求能够正常工作,在服务端需要适当设置响应头以告知浏览器哪些外部来源是可以被信任以及如何处理它们发出的数据。
### 实现方法一:通过 `CorsConfiguration` 类进行局部配置
对于特定控制器或接口级别的细粒度控制,可以利用 `@CrossOrigin` 注解直接应用于目标 REST 控制器之上:
```java
@RestController
@RequestMapping("/api")
@Slf4j
@CrossOrigin(origins = "http://example.com", maxAge = 3600)
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}
```
这种方式适用于只需要针对某些 API 接口开放 CORS 的场景[^4]。
### 实现方法二:全局配置方式之一——基于 Java 配置类
另一种更为通用的方法是在整个应用范围内统一管理 CORS 设置。这可以通过创建一个新的配置类,并在其内部定义 `addCorsMappings()` 方法来实现:
```java
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许来自任何源的请求
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
```
此代码片段展示了如何在一个名为 `CorsConfig.java` 文件中的静态内部类里声明此类配置[^1]。
另外也可以采用如下所示的方式引入配置类:
```java
@SpringBootApplication
@Import(CorsConfig.class)
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
```
这种方法适合于希望在整个项目中一致地应用相同的 CORS 政策的情况。
### 实现方法三:全局配置方式之二——借助 `FilterRegistrationBean`
除了上述两种途径外,还可以考虑使用 `FilterRegistrationBean` 来注册自定义过滤器从而达到相同的效果。下面是一个简单的例子说明了这一点:
```java
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
```
这段代码实现了更底层的操作逻辑,提供了更大的灵活性去调整具体的细节参数[^3]。
阅读全文