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); } }