package com.hundsun.jresplus.web.contain.pipeline; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import org.apache.commons.collections.iterators.IteratorEnumeration; import org.springframework.web.util.WebUtils; public class PipelineRequestWrapper extends HttpServletRequestWrapper { private static final Set<String> exclude = new HashSet<String>(); static { exclude.add(WebUtils.INCLUDE_REQUEST_URI_ATTRIBUTE); exclude.add(WebUtils.INCLUDE_CONTEXT_PATH_ATTRIBUTE); exclude.add(WebUtils.INCLUDE_SERVLET_PATH_ATTRIBUTE); exclude.add(WebUtils.INCLUDE_PATH_INFO_ATTRIBUTE); exclude.add(WebUtils.INCLUDE_QUERY_STRING_ATTRIBUTE); exclude.add(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE); exclude.add(WebUtils.FORWARD_CONTEXT_PATH_ATTRIBUTE); exclude.add(WebUtils.FORWARD_SERVLET_PATH_ATTRIBUTE); exclude.add(WebUtils.FORWARD_PATH_INFO_ATTRIBUTE); exclude.add(WebUtils.FORWARD_QUERY_STRING_ATTRIBUTE); } private Map<String, Object> parameters; private String contextPath, method, requestURI, encoding; public PipelineRequestWrapper(HttpServletRequest request, Map<String, Object> parameters, String uri) { super(request); this.contextPath = request.getContextPath(); this.method = request.getMethod(); this.requestURI = uri; this.encoding = request.getCharacterEncoding(); this.parameters = new HashMap<String, Object>(); for (Enumeration<String> en = request.getAttributeNames(); en .hasMoreElements();) { String name = en.nextElement(); if (!exclude.contains(name)) { copyAttrbiute(name); } } this.parameters.putAll(parameters); } private final void copyAttrbiute(String name) { this.parameters.put(name, super.getAttribute(name)); } @Override public void setAttribute(String name, Object o) { this.parameters.put(name, o); } @Override public Object getAttribute(String name) { if (this.parameters.containsKey(name)) { return this.parameters.get(name); } return super.getAttribute(name); } @Override public void removeAttribute(String name) { this.parameters.remove(name); } @SuppressWarnings("unchecked") @Override public Enumeration<String> getAttributeNames() { return new IteratorEnumeration(this.parameters.keySet().iterator()); } @Override public String getContextPath() { return contextPath; } @Override public String getMethod() { return method; } @Override public String getRequestURI() { return requestURI; } @Override public String getServletPath() { return requestURI; } @Override public String getCharacterEncoding() { return encoding; } @Override public String getPathInfo() { return requestURI; } }