import java.io.IOException
import java.io.PrintWriter
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 javax.servlet.http.HttpServletResponse
public class IllegalCharacterFilter implements Filter {
private String[] characterParams = null
private boolean OK=true
public void init(FilterConfig config) throws ServletException {
//if(config.getInitParameter("characterParams").length()<1)
// OK=false
//else
//this.characterParams = config.getInitParameter("characterParams").split(",")
System.out.println("初始化")
}
@SuppressWarnings("unchecked")
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest servletrequest = (HttpServletRequest) request
HttpServletResponse servletresponse = (HttpServletResponse) response
String param = ""
String paramValue = ""
//设置请求编码格式
servletresponse.setContentType("text/html")
servletresponse.setCharacterEncoding("UTF-8")
servletrequest.setCharacterEncoding("UTF-8")
java.util.Enumeration params = request.getParameterNames()
//循环读取参数
while (params.hasMoreElements()){
param = (String) params.nextElement()//获取请求中的参数
String[] values = servletrequest.getParameterValues(param)//获得每个参数对应的值
for (int i = 0i <values.lengthi++) {
paramValue = values[i]
//转换目标字符变成对象字符,可以多个。后期扩展特殊字符库用于管理
paramValue = paramValue.replaceAll("'","")
paramValue = paramValue.replaceAll("@","")
paramValue = paramValue.replaceAll("胡锦涛","***")
//这里还可以增加,如领导人 自动转义成****,可以从数据库中读取非法关键字。
values[i] = paramValue
}
//把转义后的参数重新放回request中
request.setAttribute(param, paramValue)
}
//继续向下 执行请求,如果有其他过滤器则执行过滤器
arg2.doFilter(request, response)
}
public void destroy() {
// TODO Auto-generated method stub
}
}
可以用正则表达式过滤。// 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException {
// 只允许字母和数字 // String regEx ="[^a-zA-Z0-9]"
// 清除掉所有特殊字符
String regEx="[`~!@#$%^&*()+=|{}':',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"
Pattern p = Pattern.compile(regEx)
Matcher m = p.matcher(str)
return m.replaceAll("").trim()
}
可考虑将文件装换为流来处理,或者将文件读取到的字符串转换为byte数组来处理以byte单位,
根据byte的范围来确认是否是特殊字符,替换为空字符。
或者使用正则匹配文件读取到的字符串,替换为空字符。