跨域处理与测试

如今项目以前后端分离居多,简单记录一下跨域相关处理。

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);

首先注释掉过滤器,回车访问,得到结果:

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

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