diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java index 2c9d269fe..9c473f9a6 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java @@ -22,6 +22,7 @@ public class LoggingInterceptor implements ClientHttpRequestInterceptor { log.info("Request URI: " + request.getURI()); log.info("Request method: " + request.getMethod()); + log.info("Request headers: " + request.getHeaders()); log.info("Request body: " + new String(body, "UTF-8")); ClientHttpResponse response = execution.execute(request, body); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java index 1b8ea243c..cca5eab8f 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java @@ -1,8 +1,6 @@ package ru.spcex.clearing.gatewayapi.config; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.CommonsRequestLoggingFilter; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; @@ -12,16 +10,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @EnableWebMvc public class WebConfig implements WebMvcConfigurer { - @Bean - public CommonsRequestLoggingFilter loggingFilter() { - CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); - filter.setIncludePayload(true); - filter.setIncludeQueryString(true); - filter.setMaxPayloadLength(1000000000); - filter.setAfterMessagePrefix("Income request data: "); - return filter; - } - @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html") diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java index 2e03347b6..2e832d4bb 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java @@ -10,7 +10,7 @@ import java.time.Instant; import java.time.format.DateTimeFormatter; public class InstantDeserializer extends JsonDeserializer { - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS"); + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); @Override public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedHttpServletRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedHttpServletRequest.java new file mode 100644 index 000000000..212139df4 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedHttpServletRequest.java @@ -0,0 +1,30 @@ +package ru.spcex.clearing.gatewayapi.config.filters; + +import org.springframework.util.StreamUtils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; + +public class CachedHttpServletRequest extends HttpServletRequestWrapper { + + private byte[] cachedPayload; + + public CachedHttpServletRequest(HttpServletRequest request) throws IOException { + super(request); + InputStream requestInputStream = request.getInputStream(); + this.cachedPayload = StreamUtils.copyToByteArray(requestInputStream); + } + + @Override + public ServletInputStream getInputStream() { + return new CachedServletInputStream(this.cachedPayload); + } + + @Override + public BufferedReader getReader() { + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(this.cachedPayload); + return new BufferedReader(new InputStreamReader(byteArrayInputStream)); + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedServletInputStream.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedServletInputStream.java new file mode 100644 index 000000000..19fe57efe --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/CachedServletInputStream.java @@ -0,0 +1,44 @@ +package ru.spcex.clearing.gatewayapi.config.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class CachedServletInputStream extends ServletInputStream { + private final Logger log = LoggerFactory.getLogger(getClass()); + private InputStream cachedInputStream; + + public CachedServletInputStream(byte[] cachedBody) { + this.cachedInputStream = new ByteArrayInputStream(cachedBody); + } + + @Override + public boolean isFinished() { + try { + return cachedInputStream.available() == 0; + } catch (IOException exp) { + log.error(exp.getMessage()); + } + return false; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new UnsupportedOperationException(); + } + + @Override + public int read() throws IOException { + return cachedInputStream.read(); + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/RequestCachingFilter.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/RequestCachingFilter.java new file mode 100644 index 000000000..7898f6a13 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/filters/RequestCachingFilter.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.gatewayapi.config.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.StreamUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +@Order(value = Ordered.HIGHEST_PRECEDENCE) +@Component +@WebFilter(filterName = "RequestCachingFilter", urlPatterns = "/*") +public class RequestCachingFilter extends OncePerRequestFilter { + + private final Logger log = LoggerFactory.getLogger(getClass()); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + CachedHttpServletRequest cachedHttpServletRequest = new CachedHttpServletRequest(request); + log.info("REQUEST QUERY: " + request.getQueryString()); + log.info("REQUEST DATA: " + StreamUtils.copyToString(cachedHttpServletRequest.getInputStream(), StandardCharsets.UTF_8)); + filterChain.doFilter(cachedHttpServletRequest, response); + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantSerializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantSerializer.java index d6ea47601..4459af257 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantSerializer.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantSerializer.java @@ -10,7 +10,7 @@ import java.time.Instant; import java.time.format.DateTimeFormatter; public class InstantSerializer extends JsonSerializer { - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS"); + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); @Override public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException { diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/SendMessageToSecurityServiceWithFondSecurities.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/SendMessageToSecurityServiceWithFondSecurities.java index a0399155b..ad772bc4c 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/SendMessageToSecurityServiceWithFondSecurities.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/logic/listings_fond/SendMessageToSecurityServiceWithFondSecurities.java @@ -94,7 +94,7 @@ public class SendMessageToSecurityServiceWithFondSecurities extends Stage