1. 程式人生 > >使用過濾器,將非法字眼用*代替

使用過濾器,將非法字眼用*代替

javaweb佈局檔案:

步驟:

1.建立提交文字的jsp頁面


2.建立過濾器對提交的文字進行過濾(藍色文字為主要編寫程式碼,綠色程式碼建立過濾器後自動生成)

/**
 * Servlet Filter implementation class EoorFilter
 */
/*採用註解攔截所有請求*/
@WebFilter(urlPatterns="/*")
public class EoorFilter implements Filter {
/*定義一個集合,用於存放不文明的文字*/
private List<String> list;
    /**


     * Default constructor. 
     */
    public EoorFilter() {
        // TODO Auto-generated constructor stub
    }
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)

*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;

/*對文字亂碼進行處理*/
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");

/*定義一個動態代理*/

HttpServletRequest proxy=(HttpServletRequest)Proxy.newProxyInstance(req.getClass().getClassLoader(),

new Class[] {HttpServletRequest.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName=method.getName();
if("getParameter".equals(methodName)) {

/*獲取提交的文字文字*/
String value=req.getParameter(args[0].toString());
/*獲取提交方法是get還是post*/
String methodSubmit=req.getMethod();
/*如果提交方法是get方法,則對文字亂碼進行處理*/
if("GET".equals(methodSubmit)) {
value=new String(value.getBytes("ISO-8859-1"),"utf-8");
}

/*將不文明的字眼用*代替*/
for(String str:list) {
if(value.contains(str)) {
value=value.replace(str, "*");
}
}
return value;
}else {
Object invoke = method.invoke(req, args);
return invoke;
}
}
});
chain.doFilter(proxy, response);

}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
/*給集合新增不文明的文字*/
list=new ArrayList<String>();
list.add("媽");
list.add("蛋");
list.add("姐");

}
}

3.建立servlet將提交的文字傳送到另一頁面


4.建立接收過濾後文本的jsp頁面