SpringBoot解决跨域问题

Cors协议

H5中的新特性:Cross-Origin Resource Sharing(跨域资源共享)。通过它,我们的开发者(主要指后端开发者)可以决定资源是否能被跨域访问。

cors是一个w3c标准,全称是"跨域资源共享"(Cross-origin resource sharing),它允许浏览器(目前ie8以下还不能被支持)像我们不同源的服务器发出xmlHttpRequest请求,我们可以继续使用ajax进行请求访问。

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

详情文章参考:http://www.ruanyifeng.com/blog/2016/04/cors.html

解决方案一:WebMvcConfigurerAdapter配置加入Cors的跨域

@Configuration 
public class CorsConfig extends WebMvcConfigurerAdapter { 
    @Override 

    public void addCorsMappings(CorsRegistry registry) { 

        registry.addMapping("/**") 

                .allowedOrigins("*") 

                .allowCredentials(true) 

                .allowedMethods("GET", "POST", "DELETE", "PUT") 

                .maxAge(3600); 
    } 

}

但是目前较新的spring版本已不推荐使用

方案二:filter解决跨域

@Component
public class CORSFilter implements Filter {

    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, HEAD");

        response.setHeader("Access-Control-Max-Age", "3600");

        response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With");
        chain.doFilter(req, res);

    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

方案三、使用@CrossOrigin

@CrossOrigin(origins = "http://192.168.1.10:8080", maxAge = 3600)

@RequestMapping("rest_index")

@RestController

public class IndexController{

这样就可以指定该controller中所有方法都能处理来自http:19.168.1.10:8080中的请求。

Filter的方案也支持springmvc。

WebMvcConfigurerAdapter配置加入Cors的跨域常用于springboot。

参考文章:https://www.cnblogs.com/diandianquanquan/p/10607102.html

end

评论