2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2022 Nordix Foundation. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.common.filters;
23 import java.io.BufferedReader;
24 import java.io.ByteArrayInputStream;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.InputStreamReader;
28 import java.util.Arrays;
29 import javax.servlet.ReadListener;
30 import javax.servlet.ServletInputStream;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletRequestWrapper;
34 import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
35 import org.openecomp.sdc.common.log.wrappers.Logger;
38 * Provides mechanism to wrap request's InputStream and read it more than once.
40 public class RequestWrapper extends HttpServletRequestWrapper {
42 private static final Logger LOGGER = Logger.getLogger(RequestWrapper.class);
45 private final String body;
47 public RequestWrapper(final HttpServletRequest request) throws IOException {
48 //So that other request method behave just like before
51 final StringBuilder stringBuilder = new StringBuilder();
52 try (final InputStream inputStream = request.getInputStream();
53 final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
54 final char[] charBuffer = new char[128];
56 while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
57 stringBuilder.append(charBuffer, 0, bytesRead);
59 } catch (IOException ex) {
60 LOGGER.warn(EcompLoggerErrorCode.UNKNOWN_ERROR, RequestWrapper.class.getName(), "Failed to read InputStream from request", ex);
63 //Store request body content in 'body' variable
64 body = stringBuilder.toString();
68 public String getParameter(final String name) {
69 if (body.contains(name) && super.getParameter(name) == null) {
70 final String[] split = body.split("&");
71 return Arrays.stream(split).filter(s -> s.contains(name)).findFirst().get().replace(name + '=', "");
73 return super.getParameter(name);
78 public ServletInputStream getInputStream() {
79 final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
80 return new ServletInputStream() {
82 public boolean isFinished() {
87 public boolean isReady() {
92 public void setReadListener(final ReadListener readListener) {
93 // Nothing to override
97 return byteArrayInputStream.read();
103 public BufferedReader getReader() {
104 return new BufferedReader(new InputStreamReader(this.getInputStream()));