Grails 3 默认强制使用 https

标签 grails run-app

我有一个正在运行的 Grails 3 应用程序。我想强制运行应用程序默认使用 https。有几篇可以追溯到一年前的帖子,Most recent post ,显示默认情况下强制使用 https 的可能方法。即使用别名,或使用 run-app -https 命令。

我将这个问题重新提出来,看看是否有人设法让 https 在不使用之前帖子中的显式方法的情况下默认运行。当然,对于那些总是希望在默认启用 https 的情况下运行应用程序的人来说,无论是通过 cli 还是 IDE,这是一个理想的功能。我们是否可以在 run-app 命令之前将它作为参数传递给某个地方,这样我们就不必在不同的使用环境中明确声明它?

例如:

我尝试编辑构建文件以传递 jvm 参数,但没有成功。

bootRun {
    jvmArgs = "-D-https"
}

最佳答案

为了完成这项工作,我转向了另一种方法。这个问题可以按照这篇文章中的说明来解决:Embedded Tomcat enable SSL

与 -https 选项不同,使用这种方法,我们需要创建自己的 keystore 文件并将其存储在某个地方。我们还可以使用 grails 生成的 keystore ,它默认位于构建目录中。但是,我们必须将其位置移动到更永久的位置,因为可以清理构建目录。注意:您可以通过检查 bootRun 中传递的 systemProperties 来获取 keystore 的密码和数据。

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;
}

请注意,原始帖子将协议(protocol)属性设置为:
connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol");

我将属性设置为:
connector.setAttribute("protocol", "org.apache.coyote.http11.Http11NioProtocol");

除此之外,将连接器附加到 tomcat 服务,如上一篇文章所示,一切都应该按预期工作。您现在可以运行应用程序,同时存在 http 和 https。

关于Grails 3 默认强制使用 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769351/

相关文章:

security - Grails/Groovy:与.war相比,运行应用程序的危害

flutter - 在设备上卸载应用程序后 flutter run 不起作用

grails - 使用create-app时Grails 3.1.4失败

grails intellij ide 'run application' 无法加载任何 Controller

Flutter:找到这个候选人,但参数不匹配

grails - 如何将值附加到grails中的url

mysql - Grails - 无法使用 Mysql 执行 SELECT WHERE

maven - 如果Grails BuildConfig范围未指定组织,会发生什么?

hibernate - 如何在Grails HQL语句中进行ORDER BY