Skip to content

Commit 3ab32df

Browse files
committed
Add support for HTTP/2 in Jetty with Conscrypt
This commit configures Jetty for HTTP/2 support as soon as the following conditions are met: * `server.http2.enabled=true` * Both `org.eclipse.jetty:jetty-alpn-conscrypt-server` and `org.eclipse.jetty.http2:http2-server` are on classpath This will use the Conscrypt library for ALPN and TLS support using native libraries shipped within the Conscrypt uber Jar. This does not require a JVM agent or patching the JDK classes. Closes gh-10902
1 parent ea70b2e commit 3ab32df

File tree

5 files changed

+81
-308
lines changed

5 files changed

+81
-308
lines changed

spring-boot-project/spring-boot-dependencies/pom.xml

Lines changed: 3 additions & 291 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,304 +1595,16 @@
15951595
</dependency>
15961596
<dependency>
15971597
<groupId>org.eclipse.jetty</groupId>
1598-
<artifactId>apache-jsp</artifactId>
1599-
<version>${jetty.version}</version>
1600-
</dependency>
1601-
<dependency>
1602-
<groupId>org.eclipse.jetty</groupId>
1603-
<artifactId>apache-jstl</artifactId>
1604-
<version>${jetty.version}</version>
1605-
</dependency>
1606-
<dependency>
1607-
<groupId>org.eclipse.jetty</groupId>
1608-
<artifactId>jetty-alpn-client</artifactId>
1609-
<version>${jetty.version}</version>
1610-
</dependency>
1611-
<dependency>
1612-
<groupId>org.eclipse.jetty</groupId>
1613-
<artifactId>jetty-alpn-java-client</artifactId>
1614-
<version>${jetty.version}</version>
1615-
</dependency>
1616-
<dependency>
1617-
<groupId>org.eclipse.jetty</groupId>
1618-
<artifactId>jetty-alpn-java-server</artifactId>
1619-
<version>${jetty.version}</version>
1620-
</dependency>
1621-
<dependency>
1622-
<groupId>org.eclipse.jetty</groupId>
1623-
<artifactId>jetty-alpn-server</artifactId>
1624-
<version>${jetty.version}</version>
1625-
</dependency>
1626-
<dependency>
1627-
<groupId>org.eclipse.jetty</groupId>
1628-
<artifactId>jetty-annotations</artifactId>
1629-
<version>${jetty.version}</version>
1630-
</dependency>
1631-
<dependency>
1632-
<groupId>org.eclipse.jetty</groupId>
1633-
<artifactId>jetty-ant</artifactId>
1634-
<version>${jetty.version}</version>
1635-
</dependency>
1636-
<dependency>
1637-
<groupId>org.eclipse.jetty</groupId>
1638-
<artifactId>jetty-client</artifactId>
1639-
<version>${jetty.version}</version>
1640-
</dependency>
1641-
<dependency>
1642-
<groupId>org.eclipse.jetty</groupId>
1643-
<artifactId>jetty-continuation</artifactId>
1644-
<version>${jetty.version}</version>
1645-
</dependency>
1646-
<dependency>
1647-
<groupId>org.eclipse.jetty</groupId>
1648-
<artifactId>jetty-deploy</artifactId>
1649-
<version>${jetty.version}</version>
1650-
</dependency>
1651-
<dependency>
1652-
<groupId>org.eclipse.jetty</groupId>
1653-
<artifactId>jetty-hazelcast</artifactId>
1654-
<version>${jetty.version}</version>
1655-
</dependency>
1656-
<dependency>
1657-
<groupId>org.eclipse.jetty</groupId>
1658-
<artifactId>jetty-http</artifactId>
1659-
<version>${jetty.version}</version>
1660-
</dependency>
1661-
<dependency>
1662-
<groupId>org.eclipse.jetty</groupId>
1663-
<artifactId>jetty-http-spi</artifactId>
1664-
<version>${jetty.version}</version>
1665-
</dependency>
1666-
<dependency>
1667-
<groupId>org.eclipse.jetty</groupId>
1668-
<artifactId>jetty-infinispan</artifactId>
1669-
<version>${jetty.version}</version>
1670-
</dependency>
1671-
<dependency>
1672-
<groupId>org.eclipse.jetty</groupId>
1673-
<artifactId>jetty-io</artifactId>
1674-
<version>${jetty.version}</version>
1675-
</dependency>
1676-
<dependency>
1677-
<groupId>org.eclipse.jetty</groupId>
1678-
<artifactId>jetty-jaas</artifactId>
1679-
<version>${jetty.version}</version>
1680-
</dependency>
1681-
<dependency>
1682-
<groupId>org.eclipse.jetty</groupId>
1683-
<artifactId>jetty-jaspi</artifactId>
1684-
<version>${jetty.version}</version>
1685-
</dependency>
1686-
<dependency>
1687-
<groupId>org.eclipse.jetty</groupId>
1688-
<artifactId>jetty-jmx</artifactId>
1689-
<version>${jetty.version}</version>
1690-
</dependency>
1691-
<dependency>
1692-
<groupId>org.eclipse.jetty</groupId>
1693-
<artifactId>jetty-jndi</artifactId>
1694-
<version>${jetty.version}</version>
1695-
</dependency>
1696-
<dependency>
1697-
<groupId>org.eclipse.jetty</groupId>
1698-
<artifactId>jetty-nosql</artifactId>
1699-
<version>${jetty.version}</version>
1700-
</dependency>
1701-
<dependency>
1702-
<groupId>org.eclipse.jetty</groupId>
1703-
<artifactId>jetty-plus</artifactId>
1704-
<version>${jetty.version}</version>
1705-
</dependency>
1706-
<dependency>
1707-
<groupId>org.eclipse.jetty</groupId>
1708-
<artifactId>jetty-proxy</artifactId>
1709-
<version>${jetty.version}</version>
1710-
</dependency>
1711-
<dependency>
1712-
<groupId>org.eclipse.jetty</groupId>
1713-
<artifactId>jetty-quickstart</artifactId>
1714-
<version>${jetty.version}</version>
1715-
</dependency>
1716-
<dependency>
1717-
<groupId>org.eclipse.jetty</groupId>
1718-
<artifactId>jetty-rewrite</artifactId>
1719-
<version>${jetty.version}</version>
1720-
</dependency>
1721-
<dependency>
1722-
<groupId>org.eclipse.jetty</groupId>
1723-
<artifactId>jetty-runner</artifactId>
1724-
<version>${jetty.version}</version>
1725-
</dependency>
1726-
<dependency>
1727-
<groupId>org.eclipse.jetty</groupId>
1728-
<artifactId>jetty-security</artifactId>
1729-
<version>${jetty.version}</version>
1730-
</dependency>
1731-
<dependency>
1732-
<groupId>org.eclipse.jetty</groupId>
1733-
<artifactId>jetty-server</artifactId>
1734-
<version>${jetty.version}</version>
1735-
</dependency>
1736-
<dependency>
1737-
<groupId>org.eclipse.jetty</groupId>
1738-
<artifactId>jetty-servlet</artifactId>
1739-
<version>${jetty.version}</version>
1740-
</dependency>
1741-
<dependency>
1742-
<groupId>org.eclipse.jetty</groupId>
1743-
<artifactId>jetty-servlets</artifactId>
1744-
<version>${jetty.version}</version>
1745-
</dependency>
1746-
<dependency>
1747-
<groupId>org.eclipse.jetty</groupId>
1748-
<artifactId>jetty-spring</artifactId>
1749-
<version>${jetty.version}</version>
1750-
</dependency>
1751-
<dependency>
1752-
<groupId>org.eclipse.jetty</groupId>
1753-
<artifactId>jetty-start</artifactId>
1754-
<version>${jetty.version}</version>
1755-
</dependency>
1756-
<dependency>
1757-
<groupId>org.eclipse.jetty</groupId>
1758-
<artifactId>jetty-unixsocket</artifactId>
1759-
<version>${jetty.version}</version>
1760-
</dependency>
1761-
<dependency>
1762-
<groupId>org.eclipse.jetty</groupId>
1763-
<artifactId>jetty-util</artifactId>
1764-
<version>${jetty.version}</version>
1765-
</dependency>
1766-
<dependency>
1767-
<groupId>org.eclipse.jetty</groupId>
1768-
<artifactId>jetty-util-ajax</artifactId>
1769-
<version>${jetty.version}</version>
1770-
</dependency>
1771-
<dependency>
1772-
<groupId>org.eclipse.jetty</groupId>
1773-
<artifactId>jetty-webapp</artifactId>
1774-
<version>${jetty.version}</version>
1775-
</dependency>
1776-
<dependency>
1777-
<groupId>org.eclipse.jetty</groupId>
1778-
<artifactId>jetty-xml</artifactId>
1779-
<version>${jetty.version}</version>
1780-
</dependency>
1781-
<dependency>
1782-
<groupId>org.eclipse.jetty.cdi</groupId>
1783-
<artifactId>cdi-core</artifactId>
1784-
<version>${jetty.version}</version>
1785-
</dependency>
1786-
<dependency>
1787-
<groupId>org.eclipse.jetty.cdi</groupId>
1788-
<artifactId>cdi-servlet</artifactId>
1789-
<version>${jetty.version}</version>
1790-
</dependency>
1791-
<dependency>
1792-
<groupId>org.eclipse.jetty.fcgi</groupId>
1793-
<artifactId>fcgi-client</artifactId>
1794-
<version>${jetty.version}</version>
1795-
</dependency>
1796-
<dependency>
1797-
<groupId>org.eclipse.jetty.fcgi</groupId>
1798-
<artifactId>fcgi-server</artifactId>
1799-
<version>${jetty.version}</version>
1800-
</dependency>
1801-
<dependency>
1802-
<groupId>org.eclipse.jetty.gcloud</groupId>
1803-
<artifactId>jetty-gcloud-session-manager</artifactId>
1804-
<version>${jetty.version}</version>
1805-
</dependency>
1806-
<dependency>
1807-
<groupId>org.eclipse.jetty.http2</groupId>
1808-
<artifactId>http2-client</artifactId>
1809-
<version>${jetty.version}</version>
1810-
</dependency>
1811-
<dependency>
1812-
<groupId>org.eclipse.jetty.http2</groupId>
1813-
<artifactId>http2-common</artifactId>
1814-
<version>${jetty.version}</version>
1815-
</dependency>
1816-
<dependency>
1817-
<groupId>org.eclipse.jetty.http2</groupId>
1818-
<artifactId>http2-hpack</artifactId>
1819-
<version>${jetty.version}</version>
1820-
</dependency>
1821-
<dependency>
1822-
<groupId>org.eclipse.jetty.http2</groupId>
1823-
<artifactId>http2-http-client-transport</artifactId>
1824-
<version>${jetty.version}</version>
1825-
</dependency>
1826-
<dependency>
1827-
<groupId>org.eclipse.jetty.http2</groupId>
1828-
<artifactId>http2-server</artifactId>
1829-
<version>${jetty.version}</version>
1830-
</dependency>
1831-
<dependency>
1832-
<groupId>org.eclipse.jetty.memcached</groupId>
1833-
<artifactId>jetty-memcached-sessions</artifactId>
1598+
<artifactId>jetty-bom</artifactId>
18341599
<version>${jetty.version}</version>
1600+
<scope>import</scope>
1601+
<type>pom</type>
18351602
</dependency>
18361603
<dependency>
18371604
<groupId>org.eclipse.jetty.orbit</groupId>
18381605
<artifactId>javax.servlet.jsp</artifactId>
18391606
<version>${jetty-jsp.version}</version>
18401607
</dependency>
1841-
<dependency>
1842-
<groupId>org.eclipse.jetty.osgi</groupId>
1843-
<artifactId>jetty-osgi-boot</artifactId>
1844-
<version>${jetty.version}</version>
1845-
</dependency>
1846-
<dependency>
1847-
<groupId>org.eclipse.jetty.osgi</groupId>
1848-
<artifactId>jetty-osgi-boot-jsp</artifactId>
1849-
<version>${jetty.version}</version>
1850-
</dependency>
1851-
<dependency>
1852-
<groupId>org.eclipse.jetty.osgi</groupId>
1853-
<artifactId>jetty-osgi-boot-warurl</artifactId>
1854-
<version>${jetty.version}</version>
1855-
</dependency>
1856-
<dependency>
1857-
<groupId>org.eclipse.jetty.osgi</groupId>
1858-
<artifactId>jetty-httpservice</artifactId>
1859-
<version>${jetty.version}</version>
1860-
</dependency>
1861-
<dependency>
1862-
<groupId>org.eclipse.jetty.websocket</groupId>
1863-
<artifactId>javax-websocket-client-impl</artifactId>
1864-
<version>${jetty.version}</version>
1865-
</dependency>
1866-
<dependency>
1867-
<groupId>org.eclipse.jetty.websocket</groupId>
1868-
<artifactId>javax-websocket-server-impl</artifactId>
1869-
<version>${jetty.version}</version>
1870-
</dependency>
1871-
<dependency>
1872-
<groupId>org.eclipse.jetty.websocket</groupId>
1873-
<artifactId>websocket-api</artifactId>
1874-
<version>${jetty.version}</version>
1875-
</dependency>
1876-
<dependency>
1877-
<groupId>org.eclipse.jetty.websocket</groupId>
1878-
<artifactId>websocket-client</artifactId>
1879-
<version>${jetty.version}</version>
1880-
</dependency>
1881-
<dependency>
1882-
<groupId>org.eclipse.jetty.websocket</groupId>
1883-
<artifactId>websocket-common</artifactId>
1884-
<version>${jetty.version}</version>
1885-
</dependency>
1886-
<dependency>
1887-
<groupId>org.eclipse.jetty.websocket</groupId>
1888-
<artifactId>websocket-server</artifactId>
1889-
<version>${jetty.version}</version>
1890-
</dependency>
1891-
<dependency>
1892-
<groupId>org.eclipse.jetty.websocket</groupId>
1893-
<artifactId>websocket-servlet</artifactId>
1894-
<version>${jetty.version}</version>
1895-
</dependency>
18961608
<dependency>
18971609
<groupId>org.ehcache</groupId>
18981610
<artifactId>ehcache</artifactId>

spring-boot-project/spring-boot/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,16 @@
170170
<artifactId>jetty-webapp</artifactId>
171171
<optional>true</optional>
172172
</dependency>
173+
<dependency>
174+
<groupId>org.eclipse.jetty</groupId>
175+
<artifactId>jetty-alpn-conscrypt-server</artifactId>
176+
<optional>true</optional>
177+
</dependency>
178+
<dependency>
179+
<groupId>org.eclipse.jetty.http2</groupId>
180+
<artifactId>http2-server</artifactId>
181+
<optional>true</optional>
182+
</dependency>
173183
<dependency>
174184
<groupId>org.hamcrest</groupId>
175185
<artifactId>hamcrest-library</artifactId>

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyReactiveWebServerFactory.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2017 the original author or authors.
2+
* Copyright 2012-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -98,7 +98,10 @@ protected Server createJettyServer(JettyHttpHandlerAdapter servlet) {
9898
contextHandler.addServlet(servletHolder, "/");
9999
JettyReactiveWebServerFactory.logger
100100
.info("Server initialized with port: " + port);
101-
new SslServerCustomizer(port, getSsl(), getSslStoreProvider()).customize(server);
101+
if (getSsl() != null && getSsl().isEnabled()) {
102+
new SslServerCustomizer(port, getSsl(), getSslStoreProvider(),
103+
getHttp2()).customize(server);
104+
}
102105
for (JettyServerCustomizer customizer : getServerCustomizers()) {
103106
customizer.customize(server);
104107
}

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2017 the original author or authors.
2+
* Copyright 2012-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -152,7 +152,10 @@ public WebServer getWebServer(ServletContextInitializer... initializers) {
152152
configureWebAppContext(context, initializers);
153153
server.setHandler(addHandlerWrappers(context));
154154
this.logger.info("Server initialized with port: " + port);
155-
new SslServerCustomizer(port, getSsl(), getSslStoreProvider()).customize(server);
155+
if (getSsl() != null && getSsl().isEnabled()) {
156+
new SslServerCustomizer(port, getSsl(), getSslStoreProvider(),
157+
getHttp2()).customize(server);
158+
}
156159
for (JettyServerCustomizer customizer : getServerCustomizers()) {
157160
customizer.customize(server);
158161
}

0 commit comments

Comments
 (0)