springboot项目跨域问题
时间: 2023-12-07 13:38:06 浏览: 47
Spring Boot中跨域问题可以通过以下几种方式解决:
1.使用@CrossOrigin注解实现跨域
```java
@RestController
public class MyController {
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}
```
2.通过配置文件实现跨域
在application.properties或application.yml中添加以下配置:
```yaml
spring:
cors:
allowed-origins: http://localhost:8080
```
3.通过CorsFilter对象实现跨域
```java
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://localhost:8080");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
```
4.通过Response对象实现跨域
```java
@RestController
public class MyController {
@GetMapping("/hello")
public String hello(HttpServletResponse response) {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
return "Hello World!";
}
}
```
5.通过实现ResponseBodyAdvice接口实现跨域
```java
@ControllerAdvice
public class MyControllerAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
if (response instanceof ServletServerHttpResponse) {
ServletServerHttpResponse servletResponse = (ServletServerHttpResponse) response;
HttpServletResponse httpServletResponse = servletResponse.getServletResponse();
httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
}
return body;
}
}
```