|
50 | 50 |
|
51 | 51 | import javax.net.ssl.SSLEngine;
|
52 | 52 |
|
| 53 | +import java.util.List; |
53 | 54 | import java.util.Optional;
|
| 55 | +import java.util.stream.Collectors; |
54 | 56 |
|
55 | 57 | import io.netty.channel.Channel;
|
56 | 58 | import io.netty.channel.ChannelHandler;
|
@@ -102,28 +104,40 @@ public SecureNetty4HttpServerTransport(
|
102 | 104 | this.exceptionHandler = secureHttpTransportSettingsProvider.buildHttpServerExceptionHandler(settings, this)
|
103 | 105 | .orElse(TransportExceptionHandler.NOOP);
|
104 | 106 |
|
105 |
| - this.headerVerifier = secureHttpTransportSettingsProvider.getHttpTransportAdapterProviders(settings) |
| 107 | + final List<ChannelInboundHandlerAdapter> headerVerifiers = secureHttpTransportSettingsProvider.getHttpTransportAdapterProviders( |
| 108 | + settings |
| 109 | + ) |
106 | 110 | .stream()
|
107 | 111 | .filter(p -> HEADER_VERIFIER.equalsIgnoreCase(p.name()))
|
108 |
| - .findFirst() |
109 |
| - .flatMap(p -> p.create(settings, this, ChannelInboundHandlerAdapter.class)) |
110 |
| - .orElse(null); |
| 112 | + .map(p -> p.create(settings, this, ChannelInboundHandlerAdapter.class)) |
| 113 | + .filter(Optional::isPresent) |
| 114 | + .map(Optional::get) |
| 115 | + .collect(Collectors.toList()); |
111 | 116 |
|
112 |
| - this.decompressorProvider = secureHttpTransportSettingsProvider.getHttpTransportAdapterProviders(settings) |
| 117 | + if (headerVerifiers.size() > 1) { |
| 118 | + throw new IllegalArgumentException("Cannot have more than one header verifier configured, supplied " + headerVerifiers.size()); |
| 119 | + } |
| 120 | + |
| 121 | + final Optional<TransportAdapterProvider<HttpServerTransport>> decompressorProviderOpt = secureHttpTransportSettingsProvider |
| 122 | + .getHttpTransportAdapterProviders(settings) |
113 | 123 | .stream()
|
114 | 124 | .filter(p -> REQUEST_DECOMPRESSOR.equalsIgnoreCase(p.name()))
|
115 |
| - .findFirst() |
116 |
| - .orElseGet(() -> new TransportAdapterProvider<HttpServerTransport>() { |
117 |
| - @Override |
118 |
| - public String name() { |
119 |
| - return REQUEST_DECOMPRESSOR; |
120 |
| - } |
| 125 | + .findFirst(); |
| 126 | + // There could be multiple request decompressor providers configured, using the first one |
| 127 | + decompressorProviderOpt.ifPresent(p -> logger.debug("Using request decompressor provider: {}", p)); |
121 | 128 |
|
122 |
| - @Override |
123 |
| - public <C> Optional<C> create(Settings settings, HttpServerTransport transport, Class<C> adapterClass) { |
124 |
| - return Optional.empty(); |
125 |
| - } |
126 |
| - }); |
| 129 | + this.headerVerifier = headerVerifiers.isEmpty() ? null : headerVerifiers.get(0); |
| 130 | + this.decompressorProvider = decompressorProviderOpt.orElseGet(() -> new TransportAdapterProvider<HttpServerTransport>() { |
| 131 | + @Override |
| 132 | + public String name() { |
| 133 | + return REQUEST_DECOMPRESSOR; |
| 134 | + } |
| 135 | + |
| 136 | + @Override |
| 137 | + public <C> Optional<C> create(Settings settings, HttpServerTransport transport, Class<C> adapterClass) { |
| 138 | + return Optional.empty(); |
| 139 | + } |
| 140 | + }); |
127 | 141 | }
|
128 | 142 |
|
129 | 143 | @Override
|
|
0 commit comments