Post请求的跨域问题

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);
    }
}
这样就可以解决问题.

猜你喜欢

转载自blog.csdn.net/WuQingLaoXingXing/article/details/86541599