请求跨域问题的解决办法是增加
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods","*");
即可解决,但是Post的由于有四种content-type,不能一概而论
application/x-www-form-urlencoded ,常用格式
multipart/form-data ,文件上传
application/json ,json字符串
text/xml
如果为application/json时,采用上述方法会报错
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
。
因为其会先发送options请求,在发送post请求.
这儿就需要后台对OPTIONS请求额外处理。
由于简单的调试就直接写一个filter来验证:
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods","*");
String method= httpServletRequest.getMethod();
if (method.equals("OPTIONS")){
httpServletResponse.setStatus(200);
return;
}
System.out.println(method);
filterChain.doFilter(httpServletRequest,httpServletResponse);
}
}
这样就可以解决问题.