spring跨域配置,加一个文件就可以了
本文旨在告诉大家使用spring的过滤器快速实现跨域资源访问的方法,只需要一个把下面的配置文件放到项目里就可以了。
1、跨域问题本质
跨域问题是困扰很多前后端分离开发者的一大难题,很多身边的朋友问我跨域问题,我也是微微一笑,说出一句“我不会”,不是真的不会,是真的麻烦,资料很多,一试一天。让我们先了解一下什么是跨域。
- 跨域问题的产生: 浏览器为了保证访问资源的安全性,设置了“同源策略”,来自某一个服务器「源」的数据,以及来自这个服务器的程序的数据,都与来自任何其他源的任何数据分开。这使程序能够很好地运作,又不会暴露隐私。
- 解决方案:浏览器制造商实现了一些钩子以允许数据在不同的源上共享,并称之为跨域资源共享(CORS)。要求开放数据发布者在 HTTP 响应中为任何完全开放的数据添加特殊的 CORS 头,例如:
Access-control-allow-Origin: *
2、通过过滤器实现跨域
既然知道了本质就是加上跨域的响应头,那么我们就可以进行跨域了,这里使用filter过滤器可以快速的解决跨域,屡试不爽。于是,我就特意把他从我的另一篇博客中扣取出来,记录一下。
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Configuration
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-Credentials", "true"); // 是否允许证书
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); // 允许的请求方式
response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的有效期
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
chain.doFilter(req, res);
}
}
至此,你只要在spring或者springboot中把这个类添加以下,再次访问,跨域问题应该就解决了。大家是怎么解决的呢?欢迎评论区留言。