get请求跨域问题的解决办法是增加
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods","*");
即可解决,但是由于Post的特殊性,如果仅仅在header里面加入: ‘Access-Control-Allow-Origin’:*,是并不能解决问题的,错误就是
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
。
这儿就需要后台对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);
}
}
这样就可以解决问题.