Browse Source

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-25286
See gh-25278
pull/25714/head
Brian Clozel 6 years ago
parent
commit
a82cf2fb7d
  1. 7
      spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java

7
spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java

@ -22,6 +22,7 @@ import java.net.URISyntaxException; @@ -22,6 +22,7 @@ import java.net.URISyntaxException;
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;
@ -155,7 +156,11 @@ class ReactorServerHttpRequest extends AbstractServerHttpRequest { @@ -155,7 +156,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);

Loading…
Cancel
Save