我有一个正在运行码头的 Spring 引导项目,我正在尝试使用
@Bean(name = "containerCustomizer")
public EmbeddedServletContainerCustomizer containerCustomizer()
{
return (container -> ((JettyEmbeddedServletContainerFactory) container).addServerCustomizers(
new JettyServerCustomizer()
{
@Override
public void customize(Server server)
{
// HTTP
ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
// HTTPS
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(
getClass().getClassLoader().getResource("keystore.jks").getFile());
sslContextFactory.setKeyStorePassword("password");
HttpConfiguration https = new HttpConfiguration();
https.addCustomizer(new SecureRequestCustomizer());
ServerConnector sslConnector = new ServerConnector(server,
new SslConnectionFactory(sslContextFactory,
HttpVersion.HTTP_1_1
.asString()),
new HttpConnectionFactory(https));
sslConnector.setPort(443);
server.setConnectors(new Connector[] {connector, sslConnector});
}
}));
}
当我跑步时
jar tf my_jar.jar | grep keystore
我看到它说。
keystore.jks
当我尝试打印此值时
getClass().getClassLoader().getResource("keystore.jks").getFile()
我得到
file:/root/project/my_jar.jar!/keystore.jks
但是如果我运行
new File(getClass().getClassLoader().getResource("keystore.jks").getFile()).exists()
它总是返回 false。
如何指向位于 jar 文件中的 keystore.jks?它显然就在那里,但无论我试图指出它,似乎都不起作用......
从
Java的角度来看,jar:file://<filesystem-path>!/<jar-path>
是一个URL,而不是一个文件。
做这个...
URL urlKeystore = getClass().getClassLoader().getResource("keystore.jks")
sslContextFactory.setKeyStoreResource(Resource.newResource(urlKeystore));
引用:
- apidoc for org.eclipse.jetty.util.ssl.SslContextFactory.setKeyStoreResource(Resource(
- apidoc for org.eclipse.jetty.util.resource.Resource.newResource(URL(