springboot怎么解决跨域
时间: 2023-06-08 17:04:20 浏览: 108
SpringBoot可以通过添加跨域配置来解决跨域问题。可以在Controller类上使用@CrossOrigin注解来允许特定的源访问特定的资源,也可以在配置类中配置WebMvcConfigurer的addCorsMappings()方法来全局配置跨域访问。
相关问题
springboot解决跨域
在SpringBoot中,解决跨域问题有多种方式,下面介绍三种常用方法:
1. 使用注解@CrossOrigin
在Controller类或方法上加上@CrossOrigin注解即可解决跨域问题,示例代码如下:
```java
@RestController
@CrossOrigin(origins = "*", maxAge = 3600)
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
```
这里的@CrossOrigin注解中的origins参数表示允许来自哪些域名的请求,*表示允许所有域名的请求;maxAge参数表示缓存时间,单位为秒。
2. 添加Filter
通过添加Filter来解决跨域问题,示例代码如下:
```java
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
chain.doFilter(req, res);
}
}
```
这里的CorsFilter类需要添加@Component注解,然后在doFilter方法中设置Access-Control-Allow-Origin等相关Header。
3. 使用WebMvcConfigurer
使用WebMvcConfigurer来配置跨域问题,示例代码如下:
```java
@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.maxAge(3600);
}
}
```
这里的CorsConfiguration类需要添加@Configuration注解,并实现WebMvcConfigurer接口,然后在addCorsMappings方法中配置相关参数。
springboot 解决跨域
在Spring Boot中,可以通过以下几种方式解决跨域问题:
1. 使用注解 @CrossOrigin:可以在控制器类或者具体的请求处理方法上添加 @CrossOrigin 注解来允许跨域请求。例如,可以在控制器类上添加 @CrossOrigin(origins = "http://example.com"),指定允许来自"http://example.com"域的请求。
2. 使用配置文件:可以通过在配置文件中配置跨域相关属性来解决跨域问题。在application.properties或application.yml文件中添加以下配置:
```properties
# 允许跨域的域名
spring.mvc.allow-cors=true
spring.mvc.cors.allowed-origins=http://example.com
```
3. 自定义过滤器:可以编写一个自定义的过滤器,在过滤器中设置响应头信息来允许跨域请求。例如,创建一个名为CorsFilter的过滤器类,实现javax.servlet.Filter接口,并在doFilter方法中设置响应头:
```java
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
httpResponse.setHeader("Access-Control-Max-Age", "3600");
chain.doFilter(request, response);
}
}
```
然后,在Spring Boot的启动类中注册该过滤器:
```java
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new CorsFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
}
```
以上是几种常用的解决跨域问题的方法。根据具体情况选择适合自己项目的方式进行配置和实现。
阅读全文