弹簧引导上没有带有码头的有效密钥库



我有一个正在运行码头的 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(

最新更新