springboot配置跨域请求
时间: 2025-03-23 08:13:12 浏览: 28
### Spring Boot 中跨域请求的配置方法
#### 使用过滤器方式全局配置
一种常见的解决跨域问题的方法是通过创建自定义过滤器并将其注册到应用中。这种方式可以为整个应用程序设置统一的跨域策略[^1]。
```java
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization");
try {
chain.doFilter(req, res);
} catch(Exception e){
throw new ServletException(e.getMessage());
}
}
}
```
上述代码展示了如何通过 `CorsFilter` 类实现跨域支持,其中设置了允许的源 (`*`)、HTTP 方法以及头部字段等内容。
---
#### 利用 WebMvcConfigurer 接口进行配置
另一种常用的方式是通过实现 `WebMvcConfigurer` 接口来完成跨域配置。这种方法更加灵活,适合需要针对特定路径或控制器单独设定跨域规则的情况[^4]。
```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("/api/**") // 对 /api/ 下的所有接口生效
.allowedOrigins("*") // 允许任何域名发起请求
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 支持的 HTTP 请求方法
.maxAge(3600) // 预检请求缓存时间(秒)
.allowedHeaders("Content-Type", "Authorization"); // 允许携带的 Header 字段
}
}
```
此示例说明了如何利用 `addCorsMappings` 方法指定哪些 URL 模式适用跨域规则,并明确了具体的参数范围。
---
#### 基于注解的局部配置
如果只需要对某些特定的 Controller 或 Method 进行跨域控制,则可以直接使用 `@CrossOrigin` 注解[^2]。
```java
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/example")
@CrossOrigin(origins = "http://localhost:8080", allowedHeaders = "*", methods = {RequestMethod.GET})
public class ExampleController {
@GetMapping("/data")
public String getData() {
return "This is cross-origin data.";
}
}
```
这里展示了一个简单的例子,在 `ExampleController` 上添加了 `@CrossOrigin` 注解以限定其仅接受来自 `http://localhost:8080` 的请求。
---
#### 结合配置类导入机制
为了确保跨域配置能够被正确加载,可以通过在主程序入口处加入 `@Import` 注解引入专门负责跨域逻辑的配置文件[^3]。
```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;
@SpringBootApplication
@Import(CorsConfig.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
这里的 `CorsConfig` 即为之前提到过的某个实现了跨域功能的具体配置类实例。
---
阅读全文
相关推荐



















