package com.kidgrow.zuul.filter.support;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
import java.util.*;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
*
* @Description:
* @Project:
* @CreateDate: Created in 2020/2/4 14:49
* @Author: liuke
*/
@Slf4j
public class ModifyHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final byte[] body;
private Map customHeaders;
public ModifyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(request.getInputStream(), baos);
this.body = baos.toByteArray();
this.customHeaders = new HashMap<>();
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
public void putHeader(String name, String value) {
this.customHeaders.put(name, value);
}
@Override
public String getHeader(String name) {
String value = this.customHeaders.get(name);
if (value != null) {
return value;
}
return ((HttpServletRequest) getRequest()).getHeader(name);
}
@Override
public Enumeration getHeaderNames() {
Set set = new HashSet<>(customHeaders.keySet());
Enumeration enumeration = ((HttpServletRequest) getRequest()).getHeaderNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
set.add(name);
}
return Collections.enumeration(set);
}
}