filter敏感词替换

1.properties文件的应用

在<filter>写入配置

    <filter>
        <filter-name>myFilter</filter-name>
        <filter-class>filter.MyFilter</filter-class>
        <init-param>
            <param-name>file</param-name>
            <param-value>/WEB-INF/sensitive.properties</param-value>
        </init-param>
    </filter>

在filter中提出

private Properties pp = new Properties();
        String file = filterConfig.getInitParameter("file");
        String realPath = filterConfig.getServletContext().getRealPath(file);// 获取真实路径
        try {

            pp.load(new FileInputStream(realPath));
for (Object j : pp.keySet()) {
            String key = (String) j;
            // String newKey = new String((oldKey.getBytes("ISO8859-1")),
            // "UTF8");
            output = output.replace(key, pp.getProperty(key));

2.HttpCharacterResponseWrapper extends HttpServletResponseWrapper 

通过继承HttpServletResponseWrapper

在里面定义一个private CharArrayWriter charArrayWriter = new CharArrayWriter();来缓冲数据

重写getWriter()

写个一个getCharArrayWriter()来获得缓冲内容

HttpCharacterResponseWrapper

package filter;

import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class HttpCharacterResponseWrapper extends HttpServletResponseWrapper {
    private CharArrayWriter charArrayWriter = new CharArrayWriter();

    public HttpCharacterResponseWrapper(HttpServletResponse response) {
        super(response);
        // TODO Auto-generated constructor stub
    }

    public PrintWriter getWriter() throws IOException {
        return new PrintWriter(charArrayWriter);
    }

    public CharArrayWriter getCharArrayWriter() {
        return charArrayWriter;
    }
}
View Code

Filter

package filter;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

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;

public class MyFilter implements Filter {

    private Properties pp = new Properties();

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletResponse HttpResponse = (HttpServletResponse) response;
        HttpCharacterResponseWrapper MyResponse = new HttpCharacterResponseWrapper(
                HttpResponse);
        chain.doFilter(request, MyResponse);
        String output = MyResponse.getCharArrayWriter().toString();
        for (Object j : pp.keySet()) {
            String key = (String) j;
            // String newKey = new String((oldKey.getBytes("ISO8859-1")),
            // "UTF8");
            output = output.replace(key, pp.getProperty(key));
            // output = output.replaceAll(newKey, pp.getProperty(oldKey));
        }
        // System.out.println(output);
        PrintWriter out = response.getWriter();
        out.write(output);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        String file = filterConfig.getInitParameter("file");
        String realPath = filterConfig.getServletContext().getRealPath(file);// 获取真实路径
        try {

            pp.load(new FileInputStream(realPath));

            /*
             * BufferedReader br = null; br = new BufferedReader(new
             * InputStreamReader(new FileInputStream( new File(realPath)),
             * "utf-8")); pp.load(br);
             */
        } catch (IOException e) {
        }
    }

}
View Code

 

posted on 2017-03-06 21:59  Kooing  阅读(662)  评论(0编辑  收藏  举报

导航