2016-04-21 134 views
1

作品中有一個Grails 3應用程序。我想強制運行應用程序默認使用https。有幾個帖子可以追溯到一年前,Most recent post,顯示默認情況下強制https的可能方法。即使用別名或使用run-app -https命令。默認情況下Grails 3 force https

我把這個問題備份到表中,看看是否有人設法讓https運行默認情況下不使用以前的文章中的顯式方法。當然,對於那些總是希望通過默認啓用https來運行應用程序的人來說,無論是通過cli還是IDE,這都是一個理想的功能。我們可以在run-app命令之前將它作爲參數傳遞給它,以便我們不必在不同的使用環境中明確地聲明它?

對於前:

我試圖編輯構建文件通過JVM參數,沒有運氣。

bootRun { 
    jvmArgs = "-D-https" 
} 

回答

1

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