1.这是过滤的方法:
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
* 过滤请求参数前后空格
*
* @author XiangGuoShuai
* @Date 2020年6月20日
*
*/
public class ParameterRequestWrapper {
/**
* 过滤JSON数据请求参数前后空格
* @param request
* @param requestWrapper
*/
@SuppressWarnings("unchecked")
public ServletRequest parameterRequest(HttpServletRequest request, ServletResponse response) throws IOException {
RepeatedlyRequestWrapper requestWrapper = new RepeatedlyRequestWrapper(request, response);
new ParameterRequestWrapper().parameterGetRequest(request,requestWrapper);
// 读取请求内容
BufferedReader br;
br = requestWrapper.getReader();
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
JSONObject jsonObject = JSONObject.parseObject(sb.toString());
Map<String, Object> map = new HashMap<String, Object>();
map = JSON.toJavaObject(jsonObject, Map.class);
if(null != map) {
for (Entry<String, Object> entry : map.entrySet()) {
// 删除参数前后空格
map.put(entry.getKey(), entry.getValue().toString().trim());
}
// 把参数转换之后放到我们的body里面
String json = JSON.toJSONString(map);
requestWrapper.setBody(json.getBytes("UTF-8"));
}
return requestWrapper;
}
/**
* 过滤URL请求参数前后空格
* @param request
* @param requestWrapper
*/
public void parameterGetRequest(HttpServletRequest request, RepeatedlyRequestWrapper requestWrapper){
Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, String[]> parames = new HashMap<String, String[]>();
if(null != parameterMap) {
Set<String> set =parameterMap.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String key= (String) it.next();
String[] values = parameterMap.get(key);
values[0] = values[0].trim();
parames.put(key, values);
}
requestWrapper.setParams(parames);
}
}
}
2.继承HttpServletRequestWrapper类,参数存放回写的方法
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import com.miguan.station.tools.http.HttpHelper;
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper {
private Map<String , String[]> params = new HashMap<String, String[]>();
private byte[] body;
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException{
super(request);
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
body = HttpHelper.getBodyString(request).getBytes("UTF-8");
}
@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) {
}
};
}
//重写getParameter 参数从当前类中的map获取
@Override
public String[] getParameterValues(String name) {
return params.get(name);
}
public byte[] getBody() {
return body;
}
public void setBody(byte[] body) {
this.body = body;
}
public void setParams(Map<String, String[]> params) {
this.params = params;
}
}
3.加入过滤器,调用第一步的类,放进doFilter,OK。。。。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import com.miguan.station.api.filter.wrapper.ParameterRequestWrapper;
import com.miguan.station.api.filter.wrapper.RepeatedlyRequestWrapper;
/**
* Repeatable 过滤器
*/
public class RepeatableFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String contentType = request.getContentType();
ServletRequest requestWrapper = null;
// 如果上传的是文件(multipart/form-data),就不走过滤
if (request instanceof HttpServletRequest) {
if (null != contentType && contentType.contains("multipart/form-data")) {
return;
}else {
requestWrapper = new ParameterRequestWrapper().parameterRequest((HttpServletRequest) request, response);
}
}
if (null == requestWrapper) {
chain.doFilter(request, response);
} else {
chain.doFilter(requestWrapper, response);
}
}
@Override
public void destroy() {
}
}
别玩了个web.xml配置Filter监听