You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2016/11/01 20:42:20 UTC

svn commit: r1767568 - /openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java

Author: rmannibucau
Date: Tue Nov  1 20:42:20 2016
New Revision: 1767568

URL: http://svn.apache.org/viewvc?rev=1767568&view=rev
Log:
better http2 handling with SslHostConfig instantiation - test to do asap

Modified:
    openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java

Modified: openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java
URL: http://svn.apache.org/viewvc/openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java?rev=1767568&r1=1767567&r2=1767568&view=diff
==============================================================================
--- openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java (original)
+++ openwebbeans/microwave/trunk/microwave-core/src/main/java/org/apache/microwave/Microwave.java Tue Nov  1 20:42:20 2016
@@ -55,6 +55,7 @@ import org.apache.tomcat.JarScanFilter;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
+import org.apache.tomcat.util.net.SSLHostConfig;
 import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.xml.sax.Attributes;
@@ -434,9 +435,6 @@ public class Microwave implements AutoCl
             if (connector.getAttribute("connectionTimeout") == null) {
                 connector.setAttribute("connectionTimeout", "3000");
             }
-            if (configuration.http2) { // would likely need SSLHostConfig programmatically
-                connector.addUpgradeProtocol(new Http2Protocol());
-            }
 
             tomcat.getService().addConnector(connector);
             tomcat.setConnector(connector);
@@ -460,14 +458,11 @@ public class Microwave implements AutoCl
             if (configuration.clientAuth != null) {
                 httpsConnector.setAttribute("clientAuth", configuration.clientAuth);
             }
+
             if (configuration.keyAlias != null) {
                 httpsConnector.setAttribute("keyAlias", configuration.keyAlias);
             }
 
-            if (configuration.http2) { // would likely need SSLHostConfig programmatically
-                httpsConnector.addUpgradeProtocol(new Http2Protocol());
-            }
-
             tomcat.getService().addConnector(httpsConnector);
 
             if (configuration.skipHttp) {
@@ -475,6 +470,15 @@ public class Microwave implements AutoCl
             }
         }
 
+        if (configuration.http2) {
+            final Connector c = configuration.ssl ?
+                    tomcat.getService().findConnectors()[tomcat.getService().findConnectors().length - 1] :
+                    ofNullable(tomcat.getRawConnector()).orElse(tomcat.getService().findConnectors()[0]);
+
+            c.addUpgradeProtocol(new Http2Protocol());
+            c.addSslHostConfig(buildSslHostConfig());
+        }
+
         for (final Connector c : configuration.connectors) {
             tomcat.getService().addConnector(c);
         }
@@ -515,6 +519,18 @@ public class Microwave implements AutoCl
         return this;
     }
 
+    private SSLHostConfig buildSslHostConfig() {
+        final ObjectRecipe recipe = new ObjectRecipe(SSLHostConfig.class);
+        for (final String key : configuration.properties.stringPropertyNames()) {
+            if (!key.startsWith("connector.sslhostconfig.")) {
+                continue;
+            }
+            final String substring = key.substring("connector.sslhostconfig.".length());
+            recipe.setProperty(substring, configuration.properties.getProperty(key));
+        }
+        return SSLHostConfig.class.cast(recipe.create());
+    }
+
     protected void beforeStart() {
         // no-op
     }
@@ -576,7 +592,12 @@ public class Microwave implements AutoCl
                 if (!key.startsWith("connector.")) {
                     continue;
                 }
+
                 final String substring = key.substring("connector.".length());
+                if (substring.startsWith("sslhostconfig.")) {
+                    continue;
+                }
+
                 if (!substring.startsWith("attributes.")) {
                     recipe.setProperty(substring, properties.getProperty(key));
                 } else {