From 9b615ed8c669c272530733b17d11b852fed8e3b9 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 19 Jun 2020 16:36:11 +0200 Subject: [PATCH] Fix missing sslInfo with Reactor Netty and http/2 Prior to this commit, the `SslInfo` would be missing for WebFlux apps when deployed on Reactor Netty with http/2. This commit ensures that the request adapter checks the current channel and the parent channel for the presence of the `SslHander`. In the case of http/2, the `SslHander` is tied to the parent channel. Fixes gh-25278 --- .../http/server/reactive/ReactorServerHttpRequest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java index 21e019fed4b..628a0d3c0b9 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java @@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicLong; import javax.net.ssl.SSLSession; +import io.netty.channel.Channel; import io.netty.handler.codec.http.HttpHeaderNames; import io.netty.handler.codec.http.cookie.Cookie; import io.netty.handler.ssl.SslHandler; @@ -166,7 +167,11 @@ class ReactorServerHttpRequest extends AbstractServerHttpRequest { @Override @Nullable protected SslInfo initSslInfo() { - SslHandler sslHandler = ((Connection) this.request).channel().pipeline().get(SslHandler.class); + Channel channel = ((Connection) this.request).channel(); + SslHandler sslHandler = channel.pipeline().get(SslHandler.class); + if (sslHandler == null && channel.parent() != null) { // HTTP/2 + sslHandler = channel.parent().pipeline().get(SslHandler.class); + } if (sslHandler != null) { SSLSession session = sslHandler.engine().getSession(); return new DefaultSslInfo(session);