0

我在我的应用程序中使用 GWTUplaod,如果我不使用跨域,它工作正常。但它在跨域场景中无法正常工作。让我解释一下,GWT Server 的 IP 地址为 5.5.5.10 ,GWT Client 的 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

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

4

0 回答 0