带有嵌入式码头的交叉原始请求(COR)

时间:2016-06-07 21:06:42

标签: jetty cross-domain embedded-jetty cesium

我有一个输出KML数据的KML服务器,我可以在Google地球中配置为网络位置。 KML服务器使用嵌入式Jetty。

我想在Cecium下运行KML服务器,但是我需要配置Jetty以允许COR。铯从一个webbowser运行。

有许多例子w.r.t. Jettty / COR,但其中很多都没有运行,已经过时,而且还不清楚。

KML Server主程序是:

    /*
    ** Create HHTP server
     */
    final Server server = new Server(config.getKmlPortNumber());

    // Set a handler for each context
    ContextHandlerCollection contexts = new ContextHandlerCollection();
    Handler[] contextHandler = new Handler[ForceIdentifier.TOTAL_IDENTIFIERS + 1];

    final ContextHandler context = new ContextHandler("/");
    context.setContextPath("/");
    context.setHandler(new DefaultHandler(env));
    contextHandler[0] = context;

    // Set a handler for each Force Identifier.
    for (byte i = 0; i < ForceIdentifier.TOTAL_IDENTIFIERS; i++) {
        ContextHandler contexti = new ContextHandler("/" + i);

        contexti.setHandler(new DefaultHandler(env, new ForceIdentifier(i)));
        contextHandler[i + 1] = contexti;
    }

    contexts.setHandlers(contextHandler);
    server.setHandler(contexts);

    // Start the server and set some options
    server.start();
    //server.dumpStdErr();
    server.setStopTimeout(1000);
    server.setStopAtShutdown(true);

    /*
    ** Start the federate
     */
    try {
        federate.start();
    } catch (RTIexception ex) {
        Main.logger.log(Level.SEVERE, null, ex);
    }

    /*
    ** Stop the federate
     */
    federate.stop();

KML服务器使用多个上下文处理程序。

在这里启用COR需要做些什么?

(Jetty版本是:jetty-all-9.2.10.v20150310)

1 个答案:

答案 0 :(得分:1)

org.eclipse.jetty.servlets.CrossOriginFilter Jetty用于启用COR相关功能的技术仅在ServletContext下提供,这意味着您的示例代码不使用Servlets或{{ 1}}无法使用此过滤器。

但是,您可以让自己的ServletContext为无servlet环境执行与COR相关的工作。 (考虑查看cougar project及其CrossOriginHandler实现的灵感)

或者您可以切换为使用Handler而不是ServletContextHandler,然后在项目中使用Jetty ContextHandler