Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8.5.x #22

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
added support for HTTP 2
burtbeckwith authored and ZachosDogkanos committed Apr 4, 2017
commit 090e0fe0dd90f7b0e4b2843198b831b6d1b5ac41
38 changes: 30 additions & 8 deletions src/groovy/org/grails/plugins/tomcat/TomcatServer.groovy
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ import groovy.transform.TypeCheckingMode

import org.apache.catalina.Context
import org.apache.catalina.connector.Connector
import org.apache.catalina.core.AprLifecycleListener
import org.apache.catalina.startup.Tomcat
import org.apache.coyote.http11.Http11NioProtocol
import org.apache.tomcat.util.scan.StandardJarScanner
@@ -86,6 +87,8 @@ abstract class TomcatServer implements EmbeddableServer {

tomcatDir.deleteDir()
new File(tomcatDir, 'webapps').mkdirs()

initListeners()
}

protected void initKeystore() {
@@ -114,6 +117,10 @@ abstract class TomcatServer implements EmbeddableServer {
truststoreFile = new File(truststore)
}

protected void initListeners() {
tomcat.server.addLifecycleListener new AprLifecycleListener(SSLEngine: 'on', useAprConnector: true)
}

@CompileStatic(TypeCheckingMode.SKIP)
protected void configureSsl(String host, int httpsPort) {
def sslConnector
@@ -134,15 +141,30 @@ abstract class TomcatServer implements EmbeddableServer {
sslConnector.setAttribute 'address', host
}

sslConnector.setAttribute 'keystoreFile', keystoreFile.absolutePath
sslConnector.setAttribute 'keystorePass', keyPassword

if (truststoreFile.exists()) {
CONSOLE.addStatus "Using truststore $truststore"
sslConnector.setAttribute 'truststoreFile', truststore
sslConnector.setAttribute 'truststorePass', trustPassword
sslConnector.setAttribute 'clientAuth', getConfigParam('clientAuth') ?: 'want'
def certificateKeyFile = getConfigParam('certificateKeyFile') ?: ''
def certificateFile = getConfigParam('certificateFile') ?: ''
if (certificateKeyFile && certificateFile) {
sslConnector.setAttribute 'SSLHonorCipherOrder', false
sslConnector.setAttribute 'SSLCertificateKeyFile', certificateKeyFile
sslConnector.setAttribute 'SSLCertificateFile', certificateFile
def certificateKeyPassword = getConfigParam('certificateKeyPassword') ?: ''
if (certificateKeyPassword) {
sslConnector.setAttribute 'SSLPassword', certificateKeyPassword
}
}
else {
sslConnector.setAttribute 'keystoreFile', keystoreFile.absolutePath
sslConnector.setAttribute 'keystorePass', keyPassword

if (truststoreFile.exists()) {
CONSOLE.addStatus "Using truststore $truststore"
sslConnector.setAttribute 'truststoreFile', truststore
sslConnector.setAttribute 'truststorePass', trustPassword
sslConnector.setAttribute 'clientAuth', getConfigParam('clientAuth') ?: 'want'
}
}

sslConnector.addUpgradeProtocol loadInstance('org.apache.coyote.http2.Http2Protocol')

tomcat.service.addConnector sslConnector
}