package com.doumee.core.servlet; import lombok.Getter; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * 增加请求流副本 * @author Eva.Caesar Liu * @since 2025/03/31 16:44 */ @Getter public class ServletDuplicateRequestWrapper extends HttpServletRequestWrapper { private ServletDuplicateInputStream servletDuplicateInputStream; private Map parameters = new HashMap<>(); public ServletDuplicateRequestWrapper(HttpServletRequest request) { super(request); } /** * 添加参数 */ public void addParameter (String name, Object value) { if (value == null) { return; } if (value instanceof String[]) { this.parameters.put(name, (String[]) value); } else if (value instanceof String) { this.parameters.put(name, new String[]{(String) value}); } else { this.parameters.put(name, new String[]{String.valueOf(value)}); } } @Override public Map getParameterMap() { if (this.parameters.isEmpty()) { return super.getParameterMap(); } return this.parameters; } @Override public String[] getParameterValues(String name) { if (this.parameters.isEmpty()) { return super.getParameterValues(name); } return this.parameters.get(name); } @Override public Enumeration getParameterNames() { if (this.parameters.isEmpty()) { return super.getParameterNames(); } return Collections.enumeration(this.parameters.keySet()); } @Override public ServletInputStream getInputStream() throws IOException{ if (servletDuplicateInputStream == null) { servletDuplicateInputStream = new ServletDuplicateInputStream(super.getInputStream()); } return servletDuplicateInputStream; } }