簡體   English   中英

如何在Jetty 9中捕獲套接字對象到外部常量(從Jetty 7遷移)?

[英]How to capture socket objects into external constant in Jetty 9 (migrating from Jetty 7)?

我正在將具有嵌入式Jetty的Web應用程序從7遷移到9.3.2,因此需要稍微更新代碼。 該應用程序本身具有用於Web UI,API端點以及通過智能卡向Web界面進行身份驗證的大量連接器。 實現連接器的方法如下實現(對於Jetty 7)。

private Connector createSmartCardConnector() {
SslContextFactory sslContextFactory = createSslContextFactory(smartCardUiKeyStoreFile);

LOG.info("Using truststore file: " + trustStoreFile);
sslContextFactory.setTrustStore(trustStoreFile);
sslContextFactory.setTrustStorePassword("password");
sslContextFactory.setNeedClientAuth(true);

Connector connector = new SslSocketConnector(sslContextFactory) {
  @Override public void accept(int acceptorID) throws IOException, InterruptedException {
    Socket socket = _serverSocket.accept();
    configure(socket);
    SslConnectorEndPoint connection = new SslConnectorEndPoint(socket);
    SMART_CARD_SOCKETS.add((SSLSocket) socket);
    connection.dispatch();
  }
};

從代碼中可以明顯看出, SslSocketConnector.accept()方法被覆蓋,唯一添加的部分是SMART_CARD_SOCKETS.add((SSLSocket) socket); SMART_CARD_SOCKETS是一個集,以后可用於銷毀要添加到其中的對象(插槽)。 我的問題是如何在Jetty 9中實現相同的功能,其要點是,當從用戶的計算機中取出智能卡時,當用戶嘗試進一步導航時,插槽將被破壞。

我嘗試覆蓋Jetty 9中的ServerConnector.accept()方法,但是它在其中使用了私有方法,這使此操作變得不可能。

您想要的是HttpConfiguration.Customizer的自定義實現。

將其添加到您HttpConfigurationServerConnectorHttpConfiguration中,然后它將與每個接受一起運行。

使用SecureRequestCustomizer.java示例。

    // Setup SSL
    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStorePath("/path/to/keystore");
    sslContextFactory.setKeyStorePassword("password");
    sslContextFactory.setKeyManagerPassword("password");

    // Setup HTTPS Configuration
    HttpConfiguration httpsConf = new HttpConfiguration();
    httpsConf.setSecurePort(8443);
    httpsConf.setSecureScheme("https");
    httpsConf.addCustomizer(new SecureRequestCustomizer()); // adds ssl info to request

    // Establish the ServerConnector
    ServerConnector httpsConnector = new ServerConnector(server,
            new SslConnectionFactory(sslContextFactory,"http/1.1"),
            new HttpConnectionFactory(httpsConf));
    httpsConnector.setPort(httpsPort);

    server.addConnector(httpsConnector);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM