mirror of
https://github.com/Hello-hao/Tbed.git
synced 2024-04-21 12:32:10 +00:00
103 lines
3.2 KiB
Java
103 lines
3.2 KiB
Java
package cn.hellohao.interceptor;
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import org.apache.commons.text.StringEscapeUtils;
|
|
import javax.servlet.ReadListener;
|
|
import javax.servlet.ServletInputStream;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequestWrapper;
|
|
import java.io.*;
|
|
import java.nio.charset.Charset;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
/**
|
|
* ServletRequest包装类,对request做XSS过滤处理
|
|
* @author Hellohao
|
|
*/
|
|
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
|
|
|
|
public XssHttpServletRequestWrapper(HttpServletRequest request) {
|
|
super(request);
|
|
}
|
|
|
|
@Override
|
|
public String getHeader(String name) {
|
|
return StringEscapeUtils.escapeHtml4(super.getHeader(name));
|
|
}
|
|
|
|
@Override
|
|
public String getQueryString() {
|
|
return StringEscapeUtils.escapeHtml4(super.getQueryString());
|
|
}
|
|
|
|
@Override
|
|
public String getParameter(String name) {
|
|
return StringEscapeUtils.escapeHtml4(super.getParameter(name));
|
|
}
|
|
|
|
@Override
|
|
public String[] getParameterValues(String name) {
|
|
String[] values = super.getParameterValues(name);
|
|
if(values != null) {
|
|
int length = values.length;
|
|
String[] escapseValues = new String[length];
|
|
for(int i = 0; i < length; i++){
|
|
escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
|
|
}
|
|
return escapseValues;
|
|
}
|
|
return values;
|
|
}
|
|
|
|
@Override
|
|
public ServletInputStream getInputStream() throws IOException {
|
|
String str=getRequestBody(super.getInputStream());
|
|
Map<String,Object> map= JSON.parseObject(str,Map.class);
|
|
Map<String,Object> resultMap=new HashMap<>(map.size());
|
|
for(String key:map.keySet()){
|
|
Object val=map.get(key);
|
|
if(map.get(key) instanceof String){
|
|
resultMap.put(key,StringEscapeUtils.escapeHtml4(val.toString()));
|
|
}else{
|
|
resultMap.put(key,val);
|
|
}
|
|
}
|
|
str=JSON.toJSONString(resultMap);
|
|
final ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
|
|
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 listener) {
|
|
}
|
|
};
|
|
}
|
|
|
|
private String getRequestBody(InputStream stream) {
|
|
String line = "";
|
|
StringBuilder body = new StringBuilder();
|
|
int counter = 0;
|
|
|
|
// 读取POST提交的数据内容
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, Charset.forName("UTF-8")));
|
|
try {
|
|
while ((line = reader.readLine()) != null) {
|
|
body.append(line);
|
|
counter++;
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return body.toString();
|
|
}
|
|
} |