|
|
|
|
@ -1,40 +1,32 @@
|
|
|
|
|
package kr.xit.core.spring.config.support;
|
|
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import io.netty.channel.ChannelOption;
|
|
|
|
|
import io.netty.handler.logging.LogLevel;
|
|
|
|
|
import io.netty.handler.ssl.SslContext;
|
|
|
|
|
import io.netty.handler.ssl.SslContextBuilder;
|
|
|
|
|
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
|
|
|
|
|
import io.netty.handler.timeout.ReadTimeoutHandler;
|
|
|
|
|
import io.netty.handler.timeout.WriteTimeoutHandler;
|
|
|
|
|
import java.time.Duration;
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
import javax.net.ssl.SSLException;
|
|
|
|
|
import kr.xit.core.exception.BizRuntimeException;
|
|
|
|
|
import kr.xit.core.exception.ClientErrorException;
|
|
|
|
|
import kr.xit.core.exception.ServerErrorException;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import java.time.*;
|
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
|
|
|
|
|
|
import javax.net.ssl.*;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
|
|
import org.springframework.http.MediaType;
|
|
|
|
|
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
|
|
|
|
|
import org.springframework.http.codec.json.Jackson2JsonDecoder;
|
|
|
|
|
import org.springframework.http.codec.json.Jackson2JsonEncoder;
|
|
|
|
|
import org.springframework.web.reactive.function.client.ClientRequest;
|
|
|
|
|
import org.springframework.web.reactive.function.client.ClientResponse;
|
|
|
|
|
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
|
|
|
|
|
import org.springframework.web.reactive.function.client.ExchangeStrategies;
|
|
|
|
|
import org.springframework.web.reactive.function.client.WebClient;
|
|
|
|
|
import org.springframework.web.util.DefaultUriBuilderFactory;
|
|
|
|
|
import reactor.core.publisher.Mono;
|
|
|
|
|
import reactor.netty.http.client.HttpClient;
|
|
|
|
|
import reactor.netty.resources.ConnectionProvider;
|
|
|
|
|
import reactor.netty.transport.logging.AdvancedByteBufFormat;
|
|
|
|
|
import org.springframework.context.annotation.*;
|
|
|
|
|
import org.springframework.http.*;
|
|
|
|
|
import org.springframework.http.client.reactive.*;
|
|
|
|
|
import org.springframework.http.codec.json.*;
|
|
|
|
|
import org.springframework.web.reactive.function.client.*;
|
|
|
|
|
import org.springframework.web.util.*;
|
|
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.databind.*;
|
|
|
|
|
|
|
|
|
|
import io.netty.channel.*;
|
|
|
|
|
import io.netty.handler.logging.*;
|
|
|
|
|
import io.netty.handler.ssl.*;
|
|
|
|
|
import io.netty.handler.ssl.util.*;
|
|
|
|
|
import io.netty.handler.timeout.*;
|
|
|
|
|
import kr.xit.core.exception.*;
|
|
|
|
|
import lombok.*;
|
|
|
|
|
import lombok.extern.slf4j.*;
|
|
|
|
|
import reactor.core.publisher.*;
|
|
|
|
|
import reactor.netty.http.client.*;
|
|
|
|
|
import reactor.netty.resources.*;
|
|
|
|
|
import reactor.netty.transport.logging.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <pre>
|
|
|
|
|
@ -82,7 +74,7 @@ public class WebClientConfig {
|
|
|
|
|
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(2 * 1024 * 1024))
|
|
|
|
|
.exchangeStrategies(defaultExchangeStrategies())
|
|
|
|
|
.filters(exchangeFilterFunctions -> {
|
|
|
|
|
//exchangeFilterFunctions.add(requestFilter());
|
|
|
|
|
exchangeFilterFunctions.add(requestFilter());
|
|
|
|
|
exchangeFilterFunctions.add(responseFilter());
|
|
|
|
|
})
|
|
|
|
|
.build();
|
|
|
|
|
@ -183,25 +175,25 @@ public class WebClientConfig {
|
|
|
|
|
return ExchangeFilterFunction.ofResponseProcessor(cr -> {
|
|
|
|
|
|
|
|
|
|
HttpStatus status = cr.statusCode();
|
|
|
|
|
|
|
|
|
|
if(cr.statusCode().is4xxClientError()) {
|
|
|
|
|
|
|
|
|
|
if(status.is4xxClientError()) {
|
|
|
|
|
return cr.bodyToMono(String.class)
|
|
|
|
|
.flatMap(errorBody -> Mono.error(new ClientErrorException(status, errorBody)));
|
|
|
|
|
|
|
|
|
|
} else if(cr.statusCode().is5xxServerError()) {
|
|
|
|
|
} else if(status.is5xxServerError()) {
|
|
|
|
|
return cr.bodyToMono(String.class)
|
|
|
|
|
.flatMap(errorBody -> Mono.error(new ServerErrorException(status, errorBody)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if(log.isDebugEnabled()) {
|
|
|
|
|
// StringBuilder sb = new StringBuilder(
|
|
|
|
|
// "\n>>>>>>>>>> WebClient Http Response <<<<<<<<<<<<<\n");
|
|
|
|
|
// sb.append(logStatus(cr));
|
|
|
|
|
// sb.append(logHeaders(cr));
|
|
|
|
|
// sb.append("-------------------------------------------------------");
|
|
|
|
|
// log.debug(sb.toString());
|
|
|
|
|
// }
|
|
|
|
|
return Mono.just(cr);
|
|
|
|
|
if(log.isDebugEnabled()) {
|
|
|
|
|
StringBuilder sb = new StringBuilder(
|
|
|
|
|
"\n>>>>>>>>>> WebClient Http Response <<<<<<<<<<<<<\n");
|
|
|
|
|
sb.append(logStatus(cr));
|
|
|
|
|
sb.append(logHeaders(cr));
|
|
|
|
|
sb.append("-------------------------------------------------------");
|
|
|
|
|
log.debug(sb.toString());
|
|
|
|
|
}
|
|
|
|
|
return Mono.just(cr);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|