SpringBoot解决跨域问题(CORS)

跨域资源共享(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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容