爲了使這項工作,我轉向不同的方法。這個問題可以通過按照這篇文章中的說明來解決: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。