拦截Jetty中的HTTP连接

时间:2013-04-21 22:21:04

标签: java servlets https jetty servlet-3.0

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

如何在jetty中处理HTTPS Connect?

目前我正在使用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

我在@Gverride上执行doGet和doPost,当我发送HTTP请求时,这两种方法都会正常启动。但是当客户端发送HTTPS Connect时,它们都不会被触发。我想拦截HTTPS Connect,以便我可以检查SSL流量。

知道如何让它发挥作用吗?

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

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

1 个答案:

答案 0 :(得分:0)

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

但是,您可以使用web.xml中的security-constraints将所有连接重定向到http侦听器到https端口。然而,这似乎不是你想要的。

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

相关问题