跨域资源共享(CORS)是前后端分离项目很常见的问题,本文主要是介绍在Springboot项目中通过cors协议解决跨域问题
CORS协议
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
解决方案
1.基于WebMvcConfigurerAdapter配置加入Cors的跨域
通过实现WebMvcConfigurer接口中的addCorsMappings方法来实现跨域
/**
* 跨域配置类
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")//*表示允许任何域名使用
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD")
.maxAge(3600);
}
}
- addMapping:配置可以被跨域的路径,可以任意配置
- allowedOrigins:* 代表允许所有的请求域名访问我们的跨域资源
- allowCredentials:响应头表示是否可以将请求的响应暴露给页面
- allowedMethods:允许所有的请求header访问,可以自定义设置任意请求头信息
- maxAge:配置客户端缓存预检请求的响应时间(单位为秒)
2.采用过滤器(filter)的方式
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD");
res.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
Spring官方文档学习地址:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework