为了使这项工作,我转向不同的方法。这个问题可以通过按照这篇文章中的说明来解决:Embedded Tomcat enable SSL
与-https选项不同,使用这种方法,我们需要创建自己的密钥库文件并将其存储在某个地方。我们也可以使用由grails生成的keystore,它默认位于build目录中。但是,我们必须将其位置移动到更加固定的位置,因为可以清除构建目录。注意:您可以通过检查在bootRun中传递的systemProperties来获取密钥库的密码和数据。
bootRun {
print systemProperties
}
我的输出如下:
endpoints.shutdown.enabled:true, env:development, full.stacktrace:false, grails.env:development, grails.full.stacktrace:false, info.app.grailsVersion:3.1.2, info.app.name:coolio, info.app.version:0.1, interactive.mode.enabled:true, run.active:true, server.port:8443, server.ssl.key-password:123456, server.ssl.key-store:./build/ssl/keystore, server.ssl.key-store-password:123456, verbose:false
我的配置没有确切的属性如由作者,和而仅需要部分的组合:
private static Connector getSslConnector() {
def dir = System.getProperty("user.dir")
Connector connector = new Connector();
connector.setPort(8443);
connector.setSecure(true);
connector.setScheme("https");
connector.setAttribute("keystorePass", "coolio");
connector.setAttribute("keystoreFile", dir + "/.keystore");
connector.setAttribute("clientAuth", "false");
connector.setAttribute("protocol", "HTTP/1.1");
connector.setAttribute("sslProtocol", "TLS");
connector.setAttribute("maxThreads", "200");
connector.setAttribute("protocol", "org.apache.coyote.http11.Http11NioProtocol");
connector.setAttribute("SSLEnabled", true);
return connector;
}
请注意,原始文章将协议属性设置为:
connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol");
我设置属性等于:
connector.setAttribute("protocol", "org.apache.coyote.http11.Http11NioProtocol");
除此之外,该连接器连接到Tomcat服务,如前面的文章中,并如预期都应该工作。您现在可以执行run-app,同时存在http和https。