@@ -172,8 +172,8 @@ public <T> Mono<T> parseBodyToMono(Function<HttpClientResponseWithBody, Publishe
172172 return parseBodyToFlux (responseTransformer ).singleOrEmpty ();
173173 }
174174
175- private static boolean isUnauthorized (HttpClientResponse response ) {
176- return response .status () == HttpResponseStatus .UNAUTHORIZED ;
175+ private static boolean isUnauthorized (HttpClientResponseWithBody response ) {
176+ return response .getResponse (). status () == HttpResponseStatus .UNAUTHORIZED ;
177177 }
178178
179179 private void attachChannelHandlers (HttpClientResponse response , Connection connection ) {
@@ -186,18 +186,24 @@ private <T> Mono<T> deserialized(ByteBufFlux body, Class<T> bodyType) {
186186 return JsonCodec .decode (this .context .getConnectionContext ().getObjectMapper (), body , bodyType );
187187 }
188188
189- private HttpClientResponseWithBody invalidateToken (HttpClientResponseWithBody response ) {
190- if (isUnauthorized (response .getResponse ())) {
191- this .context .getTokenProvider ().ifPresent (tokenProvider -> tokenProvider .invalidate (this .context .getConnectionContext ()));
192- }
193- return response ;
189+ private Mono <HttpClientResponseWithBody > invalidateToken (Mono <HttpClientResponseWithBody > inbound ) {
190+ return inbound
191+ .flatMap (response -> {
192+ if (isUnauthorized (response )) {
193+ this .context .getTokenProvider ().ifPresent (tokenProvider -> tokenProvider .invalidate (this .context .getConnectionContext ()));
194+ return inbound
195+ .transform (this ::invalidateToken );
196+ } else {
197+ return Mono .just (response );
198+ }
199+ });
194200 }
195201
196202 private Mono <HttpClientResponseWithBody > processResponse (HttpClientResponse response , ByteBufFlux body ) {
197203 HttpClientResponseWithBody responseWithBody = HttpClientResponseWithBody .of (body , response );
198204
199205 return Mono .just (responseWithBody )
200- .map (this ::invalidateToken )
206+ .transform (this ::invalidateToken )
201207 .transform (this .context .getErrorPayloadMapper ()
202208 .orElse (ErrorPayloadMappers .fallback ()));
203209 }
0 commit comments