springboot跨域 小明
时间: 2025-03-28 08:05:44 浏览: 30
### Spring Boot 跨域配置教程
在开发基于Spring Boot的应用程序时,跨域资源共享(CORS)是一个常见的需求。以下是几种常用的解决方案及其示例代码。
#### 方法一:使用 `@CrossOrigin` 注解
可以在具体的控制器或方法上使用 `@CrossOrigin` 注解来允许特定的域名访问资源[^1]。
```java
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://example.com") // 允许 example.com 域名访问
public class MyController {
@GetMapping("/data")
public String getData() {
return "This is cross-origin data";
}
}
```
#### 方法二:全局 CORS 配置
可以通过实现 `WebMvcConfigurer` 接口并重写 `addCorsMappings` 方法来进行全局配置。
```java
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://example.com", "http://anotherdomain.com") // 允许的域名
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法
.allowedHeaders("*") // 允许的头部信息
.allowCredentials(true); // 是否支持携带凭证
}
}
```
#### 方法三:自定义过滤器
如果需要更灵活的控制,可以创建一个自定义的过滤器来处理 CORS 请求。
```java
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@Component
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*"); // 设置允许的域名
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { // 处理预检请求
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}
```
以上三种方法可以根据实际场景选择合适的方式进行跨域配置。
---
阅读全文
相关推荐

















