Spring Boot 中如何解决跨域问题?
时间: 2024-02-22 17:58:09 浏览: 15
在 Spring Boot 中,可以通过以下两种方式来解决跨域问题:
1. 使用注解 `@CrossOrigin`
通过在 Controller 类或方法上添加 `@CrossOrigin` 注解,可以实现跨域请求。该注解有以下参数:
- `value`:指定允许跨域请求的域名或 IP 地址,多个用逗号分隔。
- `maxAge`:指定预检请求的有效期,单位为秒。
- `allowedHeaders`:指定允许的请求头信息。
- `allowCredentials`:指定是否允许发送 Cookie。
例如:
```
@CrossOrigin(value = "http://localhost:8080", maxAge = 1800, allowedHeaders = "Authorization")
@RestController
@RequestMapping("/api")
public class UserController {
//...
}
```
2. 配置 CorsFilter
在 Spring Boot 中,可以通过编写一个 CorsFilter 过滤器来处理跨域请求。具体步骤如下:
- 编写 CorsFilter 类,继承 `OncePerRequestFilter` 类,并重写 `doFilterInternal` 方法,添加响应头信息。
- 在 Spring Boot 的配置类中,添加 CorsFilter 过滤器。
例如:
```
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-Allow-Headers", "Content-Type, Authorization");
response.setHeader("Access-Control-Max-Age", "1800");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(request, response);
}
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public CorsFilter corsFilter() {
return new CorsFilter();
}
}
```
以上两种方式都可以解决跨域问题,具体使用哪种方式取决于实际情况。