2016-04-21 115 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。