java屏蔽关键字_替换禁用语(指定关键字)的过滤器
功能描述
将请求响应中所有的禁用关键字替换掉之后再输出。
使用方法
在 java web 项目的 web.xml 文件中添加如下代码。
StopWordsFilter
com.hmw.filter.StopWordsFilter
需要禁用的关键字,一个关键字占一行
keys
百度
七一五
StopWordsFilter
*.jsp
过滤器源码
ReplaceKeyWordFilter.java
package com.hmw.filter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
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;
/**
* 替换关键字的滤器
*
* @author
*/
public class StopWordsFilter implements Filter {
private Set keyWords = new HashSet();
/**
* 将需要进行替换的关键字添加到一个定义好的 Set 中
*/
@Override
public void init(FilterConfig config) throws ServletException {
String keys = config.getInitParameter("keys");
StringTokenizer tokenizer = new StringTokenizer(keys);
String token = null;
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if(token != null && token.length() > 0){
keyWords.add(tokenizer.nextToken());
}
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
CharArrayWrapper responseWrapper = new CharArrayWrapper(
(HttpServletResponse) response);
// 调用请求资源(使用自己包装的 responseWrapper)
chain.doFilter(request, responseWrapper);
// 取得响应字符串
String responseString = responseWrapper.toString();
// 将需要替换的关键字用“**”替换掉
Iterator iter = keyWords.iterator();
while (iter.hasNext()) {
responseString = replace(responseString, iter.next(), "**");
}
// 修改响应头信息中的 Content-Length
response.setContentLength(responseString.length());
PrintWriter out = response.getWriter();
out.write(responseString);
}
@Override
public void destroy() {
}
/**
* 将字符串中的所有的指定子字符串替换掉
* @param mainString 需要进行替换的字符串
* @param orig 需要被替换的子串
* @param replacement 替换后的新串
* @return 返回替换后的字符串
*/
public static String replace(String mainString, String orig, String replacement) {
String result = "";
int oldIndex = 0;
int index = 0;
int origLength = orig.length();
while ((index = mainString.indexOf(orig, oldIndex)) != -1) {
result = result + mainString.substring(oldIndex, index) + replacement;
oldIndex = index + origLength;
}
result = result + mainString.substring(oldIndex);
return result;
}
}
CharArrayWrapper.java
package com.hmw.filter;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* A response wrapper that takes everything the client would normally output and
* saves it in one big character array.
*/
public class CharArrayWrapper extends HttpServletResponseWrapper {
private CharArrayWriter charWriter;
/**
* Initializes wrapper.
*
* First, this constructor calls the parent constructor. That call is
* crucial so that the response is stored and thus setHeader, *setStatus,
* addCookie, and so forth work normally.
*
* Second, this constructor creates a CharArrayWriter that will be used to
* accumulate the response.
*/
public CharArrayWrapper(HttpServletResponse response) {
super(response);
charWriter = new CharArrayWriter();
}
/**
* When servlets or JSP pages ask for the Writer, don't give them the real
* one. Instead, give them a version that writes into the character array.
* The filter needs to send the contents of the array to the client (perhaps
* after modifying it).
*/
@Override
public PrintWriter getWriter() {
return new PrintWriter(charWriter);
}
/**
* Get a String representation of the entire buffer.
*
* Be sure not to call this method multiple times on the same
* wrapper. The API for CharArrayWriter does not guarantee that it
* "remembers" the previous value, so the call is likely to make a new
* String every time.
*/
@Override
public String toString() {
return charWriter.toString();
}
/** Get the underlying character array. */
public char[] toCharArray() {
return charWriter.toCharArray();
}
}
java屏蔽关键字_替换禁用语(指定关键字)的过滤器相关推荐
- java将占位符替换成指定字符串的函数
提供一个可以将占位符替换成指定字符串的函数 /*** 将message中的占位符按照从左到右的顺序替换成制定的字符串.* 如:info("你好,我是{},我{}岁了", " ...
- python with关键字_完全理解Python关键字with与上下文管理器
如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 "with" 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下文管理器. 对于系统资源如文件.数据 ...
- mysql声明变量关键字_声明变量的关键字
查询查看: 静态关键字static 同时在类中声明常量的关键字( 关键字final) 静态关键字static的作用 1,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内 ...
- java获取密钥长度_#1071 - 指定密钥太长;最大密钥长度为767字节
回答(28) 2 years ago 767字节是MySQL版本5.6(及之前版本)中InnoDB表的stated prefix limitation . MyISAM表的长度为1,000字节 . 在 ...
- mysql 别名 关键字_我们可以使用MySQL关键字作为列的别名吗?
是的,我们可以使用关键字作为列的别名.以下是语法-select yourColumnName AS `yourKeywordAsAliasName` from yourTableName; 在上方,y ...
- Java屏蔽输入法_输入框禁止输入法
禁止输入法 形式: 参数说明形式: active 代表输入法为中文 inactive 代表输入法为英文 auto 代表打开输入法 (默认) disable 代表关闭输入法 具体例子如下: 禁止inpu ...
- java 屏蔽邮箱_使用javamail发送邮件的时候如何阻止附件内容输出到控制台
我在使用JavaMail发送带附件的邮件时候,每次到了Transport.sendMessage()这一步,控制台就会输出附件内容,请问如何设置可以取消输出呢? public void sendFil ...
- Java屏蔽输入法_技巧:如何禁止输入法切换到全角状态
如果你不愿意看解决过程,答案就是:注册热键.以下废话可以略过. 不知道大家有没有和我一样的烦恼.我在Delphi中编程的时候,由于需要使用Alt+Shift+Space来查看函数的声明,但是输入法的全 ...
- python异常处理结构的关键字_以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...
[A型题]培养真菌常用的培养基是( ) [填空题]He made a quick ________________( adapt) to the new environment. [A型题]属于真核细 ...
最新文章
- 读Lodash源码——chunk.js
- 本地Windows远程桌面连接阿里云Ubuntu服务器
- 如何网络推广教大家怎样通过提高用户粘性来助力排名提升?
- shell编程之case语句及函数
- 来,和腾讯一起共建未来城市
- 电子工程系庆贺电贺信_创造下一代光电子集成电路
- pytorch_GPU安装
- vs安装msdn安装文档
- 塑胶产品内滑块设计要点,以及注意哪些事项?
- 详解Instant类
- 微信小程序模板消息测试- formId 的获取
- 视频变声用的什么软件?来看看今天的分享
- 2019年寒假集训-二分专题
- Qt之自定义属性Q_PROPERTY
- 集成svn到eclipse luna
- 美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析
- 10个有用的第三方iOS开源库
- 全国大学生信息安全竞赛-创新实践能力赛-SMU
- 【学习日记】接口安全
- 每个人心里都有个非盈利性质的理想