spring-boot 上没有带码头的有效密钥库

No Valid keystore with jetty on spring-boot

我有一个 spring 引导项目,它是 运行ning 码头,我正在尝试使用

注册 ssl
@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()

它总是 returns 错误。

如何指向位于我的 jar 文件中的 keystore.jks?它显然在那里,但无论我试图指向它什么,似乎都不起作用...

jar:file://<filesystem-path>!/<jar-path> 是 URL,从 Java 的角度来看不是文件。

这样做...

URL urlKeystore = getClass().getClassLoader().getResource("keystore.jks")
sslContextFactory.setKeyStoreResource(Resource.newResource(urlKeystore));

引用: