Access to XMLHttpRequest at 'http://localhost:8080/springbooth10zf/config/list?page=1&limit=5&t=1741160835069' from origin 'http://localhost:8081' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
时间: 2025-05-01 12:12:13 浏览: 43
### Spring Boot 中解决 CORS 跨域请求问题
为了处理来自不同源的HTTP请求,在Spring Boot应用程序中可以通过配置CORS来允许特定域名下的资源访问。当遇到类似`Access to XMLHttpRequest at 'http://localhost:9080/login' from origin 'http://localhost:8010' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.`这样的错误时,表明服务器未设置必要的响应头部字段[^1]。
#### 方法一:全局配置方式
通过实现 `WebMvcConfigurer` 接口并重写其方法可以在整个应用范围内启用CORS支持:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 对所有的路径生效
.allowedOrigins("http://localhost:8080", "http://localhost:8081") // 允许指定的源发起请求
.allowedMethods("*"); // 支持所有类型的HTTP请求
}
}
```
此代码片段展示了如何向所有API端点开放两个本地开发环境中的地址作为合法来源,并接受任何类型的HTTP请求[^3]。
#### 方法二:基于注解的方式
对于更细粒度的控制,可以直接在控制器类或具体的方法上使用 `@CrossOrigin` 注解来进行配置:
```java
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = {"http://localhost:8080", "http://localhost:8081"})
public class MyController {
@GetMapping("/data")
public ResponseEntity<String> getData() {
return new ResponseEntity<>("Some data here.", HttpStatus.OK);
}
}
```
这种方法适用于希望仅针对某些特定的服务接口开启跨域资源共享的情况[^4]。
无论采用哪种方案,核心都是要确保服务端返回给客户端的响应头中含有正确的 `Access-Control-Allow-Origin` 字段以及其他可能需要的相关字段(如 `Access-Control-Allow-Methods`, `Access-Control-Max-Age` 等),以此告知浏览器哪些外部站点被授权能够安全地读取这些资源的数据[^2]。
阅读全文
相关推荐













