首先说明一点,这个过滤器拦截其实是不靠谱的,比如说我的一篇文章是介绍sql注入的,或者评论的内容是有关sql的,那会过滤掉;且如果每个页面都经过这个过滤器,那么效率也是非常低的。
如果是要SQL注入拦截,可以在数据访问上层的业务层用方法的形式进行手动过滤还靠谱些。
或者使用SQL的参数形式进行,这个绝对是百分百搞得定。
关于SQL注入解释,参考:http://www.cnblogs.com/EasonJim/p/6223216.html
关于filter过滤器使用教程,参考:http://www.runoob.com/servlet/servlet-writing-filters.html
使用filter过滤器实现的代码如下:
web.xml:
filter:
package com.jsoft.jblog.filter;import java.io.IOException;
import java.util.Enumeration;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 SqlInjectionFilter implements Filter {public void destroy() {// TODO Auto-generated method stub}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}public void doFilter(ServletRequest args0, ServletResponse args1,FilterChain chain) throws IOException, ServletException {HttpServletRequest req=(HttpServletRequest)args0;HttpServletResponse res=(HttpServletResponse)args1;//获得所有请求参数名Enumeration params = req.getParameterNames();String sql = "";while (params.hasMoreElements()) {//得到参数名String name = params.nextElement().toString();//System.out.println("name===========================" + name + "--");//得到参数对应值String[] value = req.getParameterValues(name);for (int i = 0; i
}