我的数据库已经被插入了若干条存在非法字符的数据,请问如果使用Filter来过滤数据库中读取的每个字段?
以下是我通过文档写的代码但不知如何修改,如下:package com.xjdnw.utility;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
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.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;public class Response2Filter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletResponseWrapper2 response2 = new HttpServletResponseWrapper2((HttpServletResponse) response);
chain.doFilter(request, response2);
PrintWriter out = response.getWriter();
out.println(response2.toString()); response2.setHeader("Cache-Control", "no-cache");
response2.setHeader("Pragma", "no-cache");
response2.setHeader("X-UA-Compatible", "IE=EmulateIE7");
response2.setHeader("Content-Type", "text/html; charset=UTF-8");
response2.setDateHeader("Expires", -1);
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub } private class HttpServletResponseWrapper2 extends HttpServletResponseWrapper {
private StringWriter stringWriter; public HttpServletResponseWrapper2(HttpServletResponse response) {
super(response); // TODO Auto-generated constructor stub
stringWriter = new StringWriter();
} public PrintWriter getWriter() { return new PrintWriter(stringWriter);
} public String toString() {
return stringWriter.toString();
}
}
}
以下是我通过文档写的代码但不知如何修改,如下:package com.xjdnw.utility;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
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.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;public class Response2Filter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletResponseWrapper2 response2 = new HttpServletResponseWrapper2((HttpServletResponse) response);
chain.doFilter(request, response2);
PrintWriter out = response.getWriter();
out.println(response2.toString()); response2.setHeader("Cache-Control", "no-cache");
response2.setHeader("Pragma", "no-cache");
response2.setHeader("X-UA-Compatible", "IE=EmulateIE7");
response2.setHeader("Content-Type", "text/html; charset=UTF-8");
response2.setDateHeader("Expires", -1);
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub } private class HttpServletResponseWrapper2 extends HttpServletResponseWrapper {
private StringWriter stringWriter; public HttpServletResponseWrapper2(HttpServletResponse response) {
super(response); // TODO Auto-generated constructor stub
stringWriter = new StringWriter();
} public PrintWriter getWriter() { return new PrintWriter(stringWriter);
} public String toString() {
return stringWriter.toString();
}
}
}
在filter里面不太行吧,因为都是页面提交时过滤,响应时没过滤哦。
ackage com.yourcompany.gbk;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;public class CharsetFilter implements Filter{
protected String encoding = null; protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() { this.encoding = null; this.filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Conditionally select and set the character encoding to be used if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } // Pass control on to the next filter chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else if (value.equalsIgnoreCase("yes")) this.ignore = true; else this.ignore = false; } protected String selectEncoding(ServletRequest request) { return (this.encoding); }
}
web-xml配置:
<filter> <filter-name>Encoding</filter-name>
<filter-class>com.yourcompany.gbk.CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
基本上可以了
如果想删除,sql语句即可。
如果数据库存的是过滤表,启动时读入内存。