[英]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
的自定義實現。
將其添加到您HttpConfiguration
的ServerConnector
的HttpConfiguration
中,然后它將與每個接受一起運行。
使用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.