GWT上传不适用于跨域请求

时间:2015-05-28 14:50:57

标签: gwt cross-domain asyncfileupload gwtupload

我在我的应用程序中使用GWTUplaod如果我不使用跨域工作正常工作。但它在跨域方案中无法正常工作。 让我解释, GWT服务器的IP地址为5.5.5.10,GWT客户端的IP地址为5.5.5.12,早期上传时由于跨域而我收到请求错误,然后我覆盖了servlet doPost和doGetMethod

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    try {
        FlowContextManager.getInstance().setFlowId(FlowContextManager.getNextFlowId());
        processCrossDomainHeaders(request, response);
        super.doGet(request, response);
    } catch (Exception e) {
        logger.error(e);
    } finally {
        FlowContextManager.getInstance().setFlowId("");
    }
}

@Override
protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,
        ServletException {
    try {
        FlowContextManager.getInstance().setFlowId(FlowContextManager.getNextFlowId());
        processCrossDomainHeaders(request, response);
        super.doPost(request, response);
    } catch (Exception e) {
        logger.error(e);
    } finally {
        FlowContextManager.getInstance().setFlowId("");
    }

}

public void processCrossDomainHeaders(HttpServletRequest request, HttpServletResponse response) {
    HttpServletResponse resp = response;
    HttpServletRequest req = request;
    String header = req.getHeader("Origin");
    if (header != null) {
        resp.addHeader("Access-Control-Allow-Origin", header);
    }
    resp.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");

    header = req.getHeader("Access-Control-Request-Headers");
    if (header != null) {
        resp.addHeader("Access-Control-Allow-Headers", header);
    }
    resp.addHeader("Access-Control-Max-Age", "100");
}

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.addHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
    resp.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    String header = req.getHeader("Access-Control-Request-Headers");
    resp.addHeader("Access-Control-Allow-Headers", header);
    resp.addHeader("Access-Control-Max-Age", "100");
    super.doOptions(req, resp);
}

现在我的GWTUploadServlet正在扩展这个抽象的servlet。

在我的web.xml中,我指定了以下条目

<servlet>
    <servlet-name>uploadServlet</servlet-name>
    <!-- This is the default servlet, it puts files in session -->
    <servlet-class>com.drishti.ameyo.webclient.server.WebClientUploadServlet</servlet-class>

    <init-param>
        <param-name>corsDomainsRegex</param-name>
        <param-value>.*</param-value>
    </init-param>
</servlet>

我已经提到以下链接

http://code.google.com/p/gwtupload/issues/detail?id=187

请求已成功,但我在浏览器控制台上遇到以下错误。

Blocked a frame with origin "http://10.10.10.192:8888" from accessing a frame with origin "http://10.10.10.250:8888". Protocols, domains, and ports must match. FormPanelImpl.java:32
onSubmitComplete: null SuperDevModeLogger.java:71
onSubmitComplete exception parsing response:  SuperDevModeLogger.java:71
com.google.gwt.xml.client.impl.DOMParseException: Failed to parse: error on line 1 at column 1: Document is empty

  at createStackTrace
  at fillInStackTrace_1
  at fillInStackTrace
  at $fillInStackTrace
  at Throwable_1
  at Exception_1
  at RuntimeException_1
  at DOMException_1
  at DOMParseException_0
  at throwDOMParseException
  at parseImpl_0
  at $parse_3
  at parse_3
  at onSubmitComplete_0
  at $dispatch_22
  at dispatch_23
  at dispatch
  at dispatchEvent_1

我没有得到一些好的解决方案。请帮忙。

0 个答案:

没有答案