Spring 修改 ParameterMap内容
修改ParameterMap,通过重写HttpServletRequestWrapper实现,代码如下:
- 继承HttpServletRequestWrapper,重写它
package com.bdjr.client.app.intercepter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
/**
* @version 1.0
* @description:
* @mofified By:
*/
@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
@Override
public Map getParameterMap() {
return params;
}
@Override
public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}
@Override
public String[] getParameterValues(String name) {
Object v = params.get(name);
if(v == null) {
return null;
} else
if(v instanceof String[]) {
return (String[]) v;
} else
if(v instanceof String) {
return new String[] {(String)v};
} else {
return new String[] {v.toString()};
}
}
@Override
public String getParameter(String name) {
Object v = params.get(name);
if(v == null) {
return null;
} else
if(v instanceof String[]) {
String[] strArr = (String[])v;
if(strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else
if(v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
- Filter中修改Request内容
package com.bdjr.client.app.intercepter;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
/**
* @version 1.0
* @description:
* @mofified By:
*/
@Component
@WebFilter(filterName = "clientAppFilter", urlPatterns = "/*")
public class ClientAppFilter implements Filter {
@SuppressWarnings("unused")
private Logger logger = LoggerFactory.getLogger(ClientAppFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//访问地址
String uri = request.getRequestURI();
if("/insertCompany".equals(uri) || "/insertCompany".equals(uri)) {
String token = request.getParameter("token");
if(StringUtils.isEmpty(token)) {
HashMap hashMap = new HashMap(request.getParameterMap());
String[] str = {"修改了个值"};
hashMap.put("token", str);
HttpServletRequest req = request;
ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper(req, hashMap);
request.getParameterMap();
request = wrapRequest;
}
}
logger.info("client - app filter —— ClientAppFilter.java 。 。 。 。 。 。 。 ");
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
大功告成。