
同理获取HttpServletRequest请求头Access-Control-Allow-Headers的值
并设置返回,实现支持带自定义头的跨域请求。

同理获取HttpServletRequest请求头Access-Control-Allow-Headers的值
并设置返回,实现支持带自定义头的跨域请求。

同理获取HttpServletRequest请求头Access-Control-Allow-Headers的值
并设置返回,实现支持带自定义头的跨域请求。

同理获取HttpServletRequest请求头Access-Control-Allow-Headers的值
并设置返回,实现支持带自定义头的跨域请求。
Headers不写死,实现所有自定义头!
自定义header 与 自定义origin
csrf filter
带自定义头的跨域:
1. ajax示例代码:

2. 请求头信息

3. 再次请求将会报如下错误信息:

解决办法:
res.addHeader("Access-Control-Allow-Headers", "Content-Type,x-header1,x-header2");这种方式把请求头写死了,不推荐
4. 支持所有跨域,示例代码:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String origin = req.getHeader("Origin");
//res.addHeader("Access-Control-Allow-Origin", "*"); //允许所有的域跨域
//res.addHeader("Access-Control-Allow-Methods", "*"); //允许所有的方法跨域
if(!StringUtils.isEmpty(origin)){
//带cookie的时候,origin必须是全匹配,不能使用*
res.addHeader("Access-Control-Allow-Origin", origin); //允许跨域
}
res.addHeader("Access-Control-Allow-Methods", "*"); //允许跨域的方法
String headers = req.getHeader("Access-Control-Request-Headers");
//支持所有自定义头
if(!StringUtils.isEmpty(headers)){
res.addHeader("Access-Control-Allow-Headers", headers);
}
res.addHeader("Access-Control-Max-Age", "3600");
//enable cookie
res.addHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(request, response);
}
在过滤器中声明自定义的请求头,以解决自定义请求跨域的问题
请求头参数:"Content-Type,x-header1,x-header2"
自定义跨域后台请求
自定义请求头
发送自定义头时,响应头必须加上自定义头,否则会跨域
后台业务逻辑
前端页面搭建
带自定义的请求头
处理自定义的请求头
前端设置自定义请求头