【问题标题】:Intercept HTTP Connect in Jetty在 Jetty 中拦截 HTTP 连接
【发布时间】:2013-04-14 17:56:25
【问题描述】:

我正在使用 servlet 3.0 和 Jetty 编写 HTTPS 代理服务器。

如何在码头处理 HTTPS 连接?

目前我正在使用jetty-maven-plugin,我的插件配置看起来像这样-

<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <webApp>
        <contextPath>/</contextPath>        
    </webApp>
    <scanIntervalSeconds>1</scanIntervalSeconds>    
    <connectors>
        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <port>9090</port>
            <maxIdleTime>60000</maxIdleTime>
        </connector>
        <connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
            <port>9090</port>
            <keystore>src/keystore.jks</keystore>
            <keyPassword>test</keyPassword>
            <password>test</password> 
        </connector>        
    </connectors>    
</configuration>
/plugin>

是的——我想通过同一个端口处理 HTTP 和 HTTPS。当我启动 Jetty 时,它启动得很好 -

2013-04-21 15:15:03.750:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9090
2013-04-21 15:15:03.912:INFO:oejus.SslContextFactory:Enabled Protocols [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2] of [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2]
2013-04-21 15:15:03.917:INFO:oejs.AbstractConnector:Started SslSelectChannelConnector@0.0.0.0:9090
Started Jetty Server

我在 doGet 和 doPost 上使用了 @Override,当我发送 HTTP 请求时,这两种方法都可以正常触发。但是当客户端发送 HTTPS 连接时,它们都不会被触发。我想拦截 HTTPS 连接,以便检查 SSL 流量。

知道如何让它工作吗?

更新-我想我找到了第一个问题。即使我在日志中看到 SelectChannelConnector 和 SslSelectChannelConnector 在端口 9090 上启动,SSL 连接器也没有被触发。

所以我的问题是 - 是否可以使用 servlet 3.0 和 Jetty 在同一端口上同时处理 HTTP 和 HTTPS?

【问题讨论】:

    标签: java servlets https jetty servlet-3.0


    【解决方案1】:

    不,这是不可能的(实际上是可能的,但不应该如此)。每个连接器都需要自己的端口。

    但是,您可以使用 web.xml 中的安全约束将所有连接到 http 侦听器的连接重定向到 https 端口。但是,这似乎不是您想要的。

    我想知道为什么当您尝试在单个端口上设置两个连接器时,码头在启动时不会抛出任何异常。将验证这一点。

    【讨论】:

    • Jetty 或者更准确地说,当您尝试在 jetty 9 的同一端口上配置两个连接器时,JVM 会抛出 AddressAlreadyInUseException。正如预期的那样。
    • 除了某些版本的 windows 显然允许你打开同一个端口两次..这是错误和损坏的,此外,http 和 https 不应该在同一个端口上运行
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多