在 Spring 引导应用程序中配置 Jetty 上的 AJP 端口

Configuring the AJP port on Jetty in a Spring boot application

我正尝试在我的 spring 启动应用程序中为 Jetty 服务器配置 AJP 端口。但是,我看到了有关 Tomcat AJP 连接器但不是 Jetty 的示例。谁能告诉我应该如何在 Jetty 上配置 AJP 端口?

Spring 默认情况下引导捆绑 Jetty 9.3。 AJP 功能已在 jetty 9 中删除。如果您确实需要使用 AJP,则必须将 jetty 8 添加到您的类路径中,并编写自定义 JettyServerCustomizer (http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/jetty/JettyServerCustomizer.html).

我认为您不会在 spring 文档中找到任何关于此配置的内容。一旦开始编写自定义程序,您就必须通读 Jetty 文档以了解如何实现 AJP 配置。

Jetty 已放弃 AJP,转而使用 HTTP 连接器。除非您有实际用例,否则我建议迁移到 HTTP。

我还没有尝试过代码,但这应该可以工作(需要包含在 spring 引导代码中)

 return new JettyServerCustomizer() {

            @Override
            public void customize(Server server) {
                s.addConnector(new Ajp13SocketConnector());

            }   
        };

您的类路径中需要 jetty-server 8.x 和 jetty-ajp 8.x。对于最新的 8.x 版本,您的 pom.xml(如果您是 maven 用户)应该包含:

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>8.1.19.v20160209</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-ajp</artifactId>
        <version>8.1.19.v20160209</version>
    </dependency>

上面建议的示例的完整示例供任何人参考

@Bean
    public EmbeddedServletContainerFactory jettyContainer() {
        JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
        JettyServerCustomizer customizers = new JettyServerCustomizer() {
            @Override
            public void customize(Server server) {
//              Connector connector = new Ajp13SocketConnector();
//              connector.setPort(9009); //if you want a custom port
                server.addConnector(new Ajp13SocketConnector());
            }
        };
        factory.addServerCustomizers(customizers);
        return factory;
    }

日志

o.e.jetty.server.AbstractConnector: Started SelectChannelConnector@0.0.0.0:7090 o.e.jetty.server.AbstractConnector : Started Ajp13SocketConnector@0.0.0.0:9009 o.e.jetty.ajp.Ajp13SocketConnector : AJP13 is not a secure protocol. Please protect port 9009 .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 7090, 9009