首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将套接字对象捕获到Jetty 9中的外部常量(从Jetty 7迁移)?

如何将套接字对象捕获到Jetty 9中的外部常量(从Jetty 7迁移)?
EN

Stack Overflow用户
提问于 2015-08-27 17:18:18
回答 1查看 118关注 0票数 0

我正在迁移一个带有嵌入式Jetty的web应用程序,从7迁移到9.3.2,因此需要稍微更新代码。应用程序本身有许多为它编写的连接器,用于web UI、API端点以及通过智能卡对web接口进行身份验证。实现这一目标的连接器方法如下(对于Jetty 7)。

代码语言:javascript
复制
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()方法,但是它在其中使用了一个私有方法,这使得这是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 17:26:42

您需要的是HttpConfiguration.Customizer的自定义实现。

将它添加到您感兴趣的HttpConfiguration中,然后它将与每个ServerConnector一起运行。

SecureRequestCustomizer.java的示例使用。

代码语言:javascript
复制
    // 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32255663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档