Java 敏感词过滤

public class RequestFilter implements Filter {
	/* (non-Javadoc)
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		//敏感词汇过滤
		GetHttpServletRequestWrapper req = new GetHttpServletRequestWrapper((HttpServletRequest)arg0,"utf-8",request.getRequestURI());
		arg2.doFilter(req, response);
	}
}
public class GetHttpServletRequestWrapper extends HttpServletRequestWrapper {
	private String charset = "UTF-8";
	
	private String url;

	public GetHttpServletRequestWrapper(HttpServletRequest request) {
		super(request);
	}

	/**
	 * 获得被装饰对象的引用和采用的字符编码
	 * 
	 * @param request
	 * @param charset
	 */
	public GetHttpServletRequestWrapper(HttpServletRequest request,String charset, String url) {
		super(request);
		this.charset = charset;
		this.url = url;
	}

	/**
	 * 重写getParameter方法获得参数,对特殊字符进行过滤
	 */
	public String getParameter(String name) {
		String value = super.getParameter(name);
		value = value == null ? null : convert(value);
		return value;
	}

	/**
	 * 重写getParameterValues方法获得参数,对特殊字符进行过滤
	 */
	public String[] getParameterValues(String name){
		String[] values = super.getParameterValues(name);
		if(values!=null && values.length>0){
			values[0] = values[0] == null ? null : convert(values[0]);
		}
		return values;
	}
	
	/**
	 * 过滤规则
	 * @param target
	 * @return
	 */
	public String convert(String target) {
		//target =  StringEscapeUtils.escapeHtml(target);
		//target =  StringEscapeUtils.escapeJavaScript(target);
		//敏感词汇信息
		List<SensitiveWord> swList = SwConstant.ALL_SW_LIST;
		//判断是否拦截,把拦截的内容替换为相应的*
		if(null != url && (url.contains("/discuss/add") || url.contains("/discuss/addLivelDiscuss") || url.contains("/suggestion/add"))){
			if(null != swList && !swList.isEmpty()){
				int num = 0;
				for(SensitiveWord sw : swList){
					if(null != sw.getSw() && !"".equals(sw.getSw()) && target.contains(sw.getSw().trim())){
						StringBuffer repStr = new StringBuffer();
						num = sw.getSw().trim().length();
						for(int i=0;i<num;i++){
							repStr.append("*");
						}
						target = target.replace(sw.getSw(), repStr);
					}
				}
			}
		}
		return target;
	}
}
web.xml中配置

<filter>
    <filter-name>RequestFilter</filter-name>
    <filter-class>gt.common.RequestFilter</filter-class>
    <async-supported>true</async-supported>
  </filter>
  <filter-mapping>
    <filter-name>RequestFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>RequestFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页