请问一下如何在JSP网站中过滤敏感词汇啊??如何实现 一个门户上的简单留言功能。提交敏感词汇的时候自动过滤掉。请问如何实现啊。大家谁做过有没有这样的例子麻烦发我一下啊。[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我没有做过。但是给你说下我的思路啊1.用表或者文件保存需要过滤的关键字。这里我感觉用XML文件保存就可以了,甚至用文本文件也未尝不可。2.提供一个方法读取这个保存过滤关键字的XML文件或者文本文件。如: public String[] getFilterWords(){}3.当用户写了留言,提交的时候,就把留言的字符替换。如: String str = "留言的字符内容"; for(String filterWord : getFilterWords()) { str.replace(filterWord , "*"); } 可以利用 JSP 的自定义标签来进行关键字过滤; /**默认读取的过滤词文件*/ public final static String DEFAULT_FILENAME = "keyWord.properties"; public final static String FILENAME_FOR_DOCTITLE = "keyWordForTitle.properties"; private static Map<String, String> keywords = new HashMap<String, String>(); private static Map<String, Pattern> patterns = new HashMap<String, Pattern>(); static { try { /**默认读取keyWord.properties文件*/ readFile(DEFAULT_FILENAME); } catch (Exception e) { logger.error("init Error!", e); } } private static void readFile(String filename){ try{ if(patterns.containsKey(filename)){ return; } StringBuffer patternBuf = new StringBuffer(""); InputStream in = KeyWordFilter.class.getClassLoader().getResourceAsStream(filename); if (null == in) { in = KeyWordFilter.class.getClassLoader().getResourceAsStream( "META-INF/" + filename); } InputStreamReader isr = new InputStreamReader(in, "UTF-8"); BufferedReader br = new BufferedReader(isr); patternBuf.append("("); String keyword = null; while((keyword = br.readLine()) != null){ patternBuf.append(keyword + "|"); } patternBuf.deleteCharAt(patternBuf.length() - 1); patternBuf.append(")"); String keyWords = patternBuf.toString(); keywords.put(filename, keyWords); patterns.put(filename, Pattern.compile(keyWords)); }catch (Exception e) { logger.error("read file: " + filename, e); } } public static String doFilter(String content) { return doFilter(content, DEFAULT_FILENAME); } public static boolean doChecker(String content) { return doChecker(content, DEFAULT_FILENAME); } public static String doFilter(String content, String filename) { if(null == content){ return null; } readFile(filename); Pattern pattern = patterns.get(filename); Matcher m = pattern.matcher(content); content = m.replaceAll(""); return content; } public static boolean doChecker(String content, String filename) { if(null == content){ return false; } readFile(filename); Pattern pattern = patterns.get(filename); Matcher m = pattern.matcher(content); return m.find(); } public static void main(String[] args) { String test1 = "订票"; System.out.println(KeyWordFilter.doChecker(test1)); System.out.println(KeyWordFilter.doFilter(test1)); System.out.println(KeyWordFilter.doChecker(test1, FILENAME_FOR_DOCTITLE)); System.out.println(KeyWordFilter.doFilter(test1, FILENAME_FOR_DOCTITLE)); }写几个敏感词文件就行了 KeyWordFilter这个是什么东西??? public class FilterTest extends HttpServlet implements Filter { private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { String[] filterString = {"AAA", "vbb", "vvv", "", ""};//过滤字符串 String str = ""; try { request.setCharacterEncoding("utf-8"); HttpServletRequest req= (HttpServletRequest) request; String filterParam= req.getParameter("filterParam"); if (filterParam != null && !filterParam.trim().length() > 0) { for (int i = 0; i < filterString.length; i++) { str = filterString[i]; if (filterParam .indexOf(str) != -1) filterParam = filterParam.replaceAll(str,"******"); } req.setAttribute("filterParam", filterParam); } filterChain.doFilter(request, response); } catch (ServletException sx) { filterConfig.getServletContext().log(sx.getMessage()); } catch (IOException iox) { filterConfig.getServletContext().log(iox.getMessage()); } } public void destroy() { }} package filter;import java.io.CharArrayWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.StringTokenizer;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 IllegalContentFilter implements Filter { protected FilterConfig filterConfig; public void destroy() { this.filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("gbk"); response.setCharacterEncoding("gbk"); HttpServletResponse res = (HttpServletResponse) response; PrintWriter out = response.getWriter(); WrapperImpl wrapper = new WrapperImpl(res); chain.doFilter(request, wrapper); out.println(replaceIllegalContent(wrapper.toString(), filterConfig.getInitParameter("illegalContent"), filterConfig.getInitParameter("replaceString"))); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public String replaceIllegalContent(String content, String illegalContent, String replaceString) { if (content == null || content.trim().equals("") || illegalContent == null || illegalContent.trim().equals("") || replaceString == null || replaceString.trim().equals("")) { System.err.println("缺少必要的属性无法过滤 返回传进来的内容"); } else { for (StringTokenizer tokenizer = new StringTokenizer(illegalContent, ",", false); tokenizer.hasMoreTokens();) { content = content.replaceAll(tokenizer.nextToken(), replaceString); } } return content; } private class WrapperImpl extends HttpServletResponseWrapper { private CharArrayWriter output; public WrapperImpl(HttpServletResponse response) { super(response); output = new CharArrayWriter(); } public String toString() { return output.toString(); } public PrintWriter getWriter() { return new PrintWriter(output); } }}web.xml code<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>illegalFilter</filter-name> <filter-class>filter.IllegalContentFilter</filter-class> <init-param> <param-name>illegalContent</param-name> <param-value> 去你吗的,草你吗,草你妈,操你妈,靠,SB,傻B,傻逼,我日,日你娘,干你娘,上你妈,毛泽东,组织,开枪,马克思,列宁,恩格斯,周恩来 </param-value> </init-param> <init-param> <param-name>replaceString</param-name> <param-value>[河蟹]</param-value> </init-param> </filter> <filter-mapping> <filter-name>illegalFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app> 参考http://download.csdn.net/source/1537199 求一个Ext 2.2 gridpanel + store分页显示代码 Hibernate 中怎么用left join 啊? struts2中的效验问题 我从csdn.net网上下载的 Java类实现数据库连接池(源码)不能用呀?? struts+hibernate+srping问题集锦!!! 初学JAVA 怎么入手-————在线等待!!!! BMP中ejbLoad()异常,请教 telnet 127.0.0.1 /80 为什么总是连接失败? 公司只给上csdn等技术网站 其他网站都上不了 mybaits 无法自动生成Oracle代码 在JSP页面$取值问题 关于定时任务
1.用表或者文件保存需要过滤的关键字。这里我感觉用XML文件保存就可以了,甚至用文本文件也未尝不可。
2.提供一个方法读取这个保存过滤关键字的XML文件或者文本文件。如:
public String[] getFilterWords(){}
3.当用户写了留言,提交的时候,就把留言的字符替换。如:
String str = "留言的字符内容";
for(String filterWord : getFilterWords()) {
str.replace(filterWord , "*");
}
可以利用 JSP 的自定义标签来进行关键字过滤;
public final static String DEFAULT_FILENAME = "keyWord.properties";
public final static String FILENAME_FOR_DOCTITLE = "keyWordForTitle.properties";
private static Map<String, String> keywords = new HashMap<String, String>();
private static Map<String, Pattern> patterns = new HashMap<String, Pattern>(); static {
try {
/**默认读取keyWord.properties文件*/
readFile(DEFAULT_FILENAME);
} catch (Exception e) {
logger.error("init Error!", e);
}
} private static void readFile(String filename){
try{
if(patterns.containsKey(filename)){
return;
}
StringBuffer patternBuf = new StringBuffer("");
InputStream in = KeyWordFilter.class.getClassLoader().getResourceAsStream(filename);
if (null == in) {
in = KeyWordFilter.class.getClassLoader().getResourceAsStream(
"META-INF/" + filename);
}
InputStreamReader isr = new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(isr);
patternBuf.append("(");
String keyword = null;
while((keyword = br.readLine()) != null){
patternBuf.append(keyword + "|");
}
patternBuf.deleteCharAt(patternBuf.length() - 1);
patternBuf.append(")");
String keyWords = patternBuf.toString();
keywords.put(filename, keyWords);
patterns.put(filename, Pattern.compile(keyWords));
}catch (Exception e) {
logger.error("read file: " + filename, e);
}
}
public static String doFilter(String content) {
return doFilter(content, DEFAULT_FILENAME);
} public static boolean doChecker(String content) {
return doChecker(content, DEFAULT_FILENAME);
}
public static String doFilter(String content, String filename) {
if(null == content){
return null;
}
readFile(filename);
Pattern pattern = patterns.get(filename);
Matcher m = pattern.matcher(content);
content = m.replaceAll("");
return content;
} public static boolean doChecker(String content, String filename) {
if(null == content){
return false;
}
readFile(filename);
Pattern pattern = patterns.get(filename);
Matcher m = pattern.matcher(content);
return m.find();
} public static void main(String[] args) {
String test1 = "订票";
System.out.println(KeyWordFilter.doChecker(test1));
System.out.println(KeyWordFilter.doFilter(test1));
System.out.println(KeyWordFilter.doChecker(test1, FILENAME_FOR_DOCTITLE));
System.out.println(KeyWordFilter.doFilter(test1, FILENAME_FOR_DOCTITLE));
}写几个敏感词文件就行了
KeyWordFilter这个是什么东西???
private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
String[] filterString = {"AAA", "vbb", "vvv", "", ""};//过滤字符串
String str = ""; try {
request.setCharacterEncoding("utf-8");
HttpServletRequest req= (HttpServletRequest) request;
String filterParam= req.getParameter("filterParam"); if (filterParam != null && !filterParam.trim().length() > 0) {
for (int i = 0; i < filterString.length; i++) {
str = filterString[i];
if (filterParam .indexOf(str) != -1)
filterParam = filterParam.replaceAll(str,"******");
}
req.setAttribute("filterParam", filterParam);
}
filterChain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
}
public void destroy() {
}
}
package filter;import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;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 IllegalContentFilter implements Filter {
protected FilterConfig filterConfig; public void destroy() {
this.filterConfig = null;
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk"); HttpServletResponse res = (HttpServletResponse) response;
PrintWriter out = response.getWriter();
WrapperImpl wrapper = new WrapperImpl(res); chain.doFilter(request, wrapper);
out.println(replaceIllegalContent(wrapper.toString(), filterConfig.getInitParameter("illegalContent"), filterConfig.getInitParameter("replaceString")));
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} public String replaceIllegalContent(String content, String illegalContent, String replaceString) {
if (content == null || content.trim().equals("") || illegalContent == null || illegalContent.trim().equals("") || replaceString == null || replaceString.trim().equals("")) {
System.err.println("缺少必要的属性无法过滤 返回传进来的内容");
} else {
for (StringTokenizer tokenizer = new StringTokenizer(illegalContent, ",", false); tokenizer.hasMoreTokens();) {
content = content.replaceAll(tokenizer.nextToken(), replaceString);
}
}
return content;
} private class WrapperImpl extends HttpServletResponseWrapper {
private CharArrayWriter output; public WrapperImpl(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
} public String toString() {
return output.toString();
} public PrintWriter getWriter() {
return new PrintWriter(output);
}
}
}web.xml code<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>illegalFilter</filter-name>
<filter-class>filter.IllegalContentFilter</filter-class>
<init-param>
<param-name>illegalContent</param-name>
<param-value>
去你吗的,草你吗,草你妈,操你妈,靠,SB,傻B,傻逼,我日,日你娘,干你娘,上你妈,毛泽东,组织,开枪,马克思,列宁,恩格斯,周恩来
</param-value>
</init-param>
<init-param>
<param-name>replaceString</param-name>
<param-value>[河蟹]</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>illegalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>