net.lulihu.http.WafRequestWrapper Maven / Gradle / Ivy
package net.lulihu.http;
import net.lulihu.ObjectKit.WafKit;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.HashMap;
import java.util.Map;
/**
* Request请求过滤包装
*/
public class WafRequestWrapper extends HttpServletRequestWrapper {
private final boolean filterXSS;
private final boolean filterSQL;
public WafRequestWrapper(HttpServletRequest request, boolean filterXSS, boolean filterSQL) {
super(request);
this.filterXSS = filterXSS;
this.filterSQL = filterSQL;
}
public WafRequestWrapper(HttpServletRequest request) {
this(request, true, true);
}
/**
* @param parameter 过滤参数
* @return 数组参数过滤
*/
@Override
public String[] getParameterValues(String parameter) {
String[] values = super.getParameterValues(parameter);
if (values == null) {
return null;
}
int count = values.length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++) {
encodedValues[i] = filterParamString(values[i]);
}
return encodedValues;
}
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public Map getParameterMap() {
Map primary = super.getParameterMap();
Map result = new HashMap<>(primary.size());
for (Map.Entry entry : primary.entrySet()) {
result.put(entry.getKey(), filterEntryString(entry.getValue()));
}
return result;
}
private String[] filterEntryString(String[] rawValue) {
for (int i = 0; i < rawValue.length; i++) {
rawValue[i] = filterParamString(rawValue[i]);
}
return rawValue;
}
/**
* @param parameter 过滤参数
* @return 参数过滤
*/
@Override
public String getParameter(String parameter) {
return filterParamString(super.getParameter(parameter));
}
/**
* @param name 过滤内容
* @return 请求头过滤
*/
@Override
public String getHeader(String name) {
return filterParamString(super.getHeader(name));
}
/**
* Cookie内容过滤
*/
@Override
public Cookie[] getCookies() {
Cookie[] existingCookies = super.getCookies();
if (existingCookies != null) {
for (Cookie cookie : existingCookies) {
cookie.setValue(filterParamString(cookie.getValue()));
}
}
return existingCookies;
}
/**
* @param rawValue 待处理内容
* @return 过滤字符串内容
*/
private String filterParamString(String rawValue) {
if (null == rawValue) {
return null;
}
String tmpStr = rawValue;
if (this.filterXSS) {
tmpStr = WafKit.stripXSS(rawValue);
}
if (this.filterSQL) {
tmpStr = WafKit.stripSqlInjection(tmpStr);
}
return tmpStr;
}
}