1

私は Grails 3 アプリケーションを動作させています。run-app がデフォルトで https を使用するように強制したい。1年ほど前にさかのぼる投稿がいくつかあります.最新の投稿では、デフォルトでhttpsを強制する方法を示しています. つまり、エイリアスを使用するか、run-app -https コマンドを使用します。

この問題をテーブルに戻して、以前の投稿で明示的な方法を使用せずにデフォルトで https を実行することができた人がいるかどうかを確認します。確かに、cli または IDE のいずれを使用する場合でも、常にデフォルトで https を有効にしてアプリを実行したい人にとって、これは望ましい機能です。run-app コマンドの前のどこかに引数として渡して、さまざまな使用環境で明示的に指定する必要がないようにすることはできますか?

例:

jvm引数を渡すようにビルドファイルを編集しようとしましたが、うまくいきませんでした。

bootRun {
    jvmArgs = "-D-https"
}
4

1 に答える 1

1

これを機能させるために、ギアを別のアプローチにシフトしました。この質問は、次の記事の指示に従って解決できます: Embedded Tomcat enable SSL

-https オプションとは異なり、このアプローチを使用すると、独自のキーストア ファイルを作成してどこかに保存する必要があります。grails によって生成されたキーストアを使用することもできます。これはデフォルトでビルド ディレクトリにあります。ただし、ビルド ディレクトリを消去できるため、その場所をより恒久的な場所に移動する必要があります。注: 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;
}

元の投稿では protocol 属性が次のように設定されていることに注意してください。

connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol");

そして、属性を次のように設定します。

connector.setAttribute("protocol", "org.apache.coyote.http11.Http11NioProtocol");

それ以外は、前の記事で示したように、コネクタを tomcat サービスに接続すると、すべてが意図したとおりに機能するはずです。http と https の両方が存在する状態で run-app を実行できるようになりました。

于 2016-04-21T13:58:58.433 に答える