springboot怎么配置跨域
时间: 2024-01-31 11:02:27 浏览: 22
在Spring Boot中配置跨域可以通过使用过滤器来实现。以下是一种常见的配置跨域的方法:
1. 创建一个过滤器类,例如`CorsFilter`,并实现`javax.servlet.Filter`接口。
2. 在过滤器类中重写`doFilter`方法,用于处理跨域请求。
3. 在`doFilter`方法中设置响应头,允许跨域访问。
4. 在Spring Boot的配置类中注册过滤器。
下面是一个示例代码:
```java
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
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");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
```
在上述代码中,我们通过设置响应头来允许跨域访问。`Access-Control-Allow-Origin`设置为`*`表示允许所有来源的请求。`Access-Control-Allow-Methods`设置允许的请求方法,`Access-Control-Max-Age`设置预检请求的有效期,`Access-Control-Allow-Headers`设置允许的请求头。
然后,在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 WebConfig {
@Bean
public FilterRegistrationBean<CorsFilter> corsFilterRegistrationBean() {
FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new CorsFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setName("CorsFilter");
registrationBean.setOrder(1);
return registrationBean;
}
}
```
通过上述配置,我们将`CorsFilter`过滤器注册到Spring Boot中,并设置了过滤器的顺序和拦截的URL模式。