如今项目以前后端分离居多,简单记录一下跨域相关处理。
springboot跨域配置
新建过滤器Filter,一般放在项目config目录下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @WebFilter(filterName = "CorsFilter ") @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, x-token"); chain.doFilter(req, res); } }
|
一般根据项目前端具体需求开放对应请求。
跨域测试
首先准备测试类:
1 2 3 4 5 6 7 8 9
| @RestController @RequestMapping("/test") public class TestController { @GetMapping("/testFilter") @PassScheduleInfo public String testFilter() { return "模拟返回"; } }
|
测试方法有很多种,本地编写一个简单的请求js,用postman工具等都可以,这里用一种更加方便的测试方法:浏览器控制台。
F12打开console,直接输入:
1 2 3 4 5 6 7
| var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://127.0.0.1:8080/test/testFilter'); xhr.send(null); xhr.onload = function(e) { var xhr = e.target; console.log(xhr.responseText); }
|
若有token可在send()前加上,
1 2
| var token= "......" xhr.setRequestHeader("x-access-token",token);
|
首先注释掉过滤器,回车访问,得到结果:

加上过滤器后,再次访问:

成功返回,证明过滤器有效,测试方法也简单实用。