首先,列出我用到的参考资料吧:
资料一来自:http://magicgod.javaeye.com/blog/146537
资料二来自:http://blog.sina.com.cn/s/blog_56000153010005iq.html
我就是根据上面的两个资料,写了一个FILTER和一个JAVA 类,具体如下:
FILTER: SpecialCharacterFilter
view plaincopy to clipboardprint?
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
public class SpecialCharacterFilter extends HttpServlet implements Filter {
protected FilterConfig config;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("[SpecialCharacterFilter] : doFilter *************");
HttpServletRequest request = (HttpServletRequest)req;
HashMap<String, String[]> m = new HashMap(request.getParameterMap());
HashMap<String, String[]> mm = new HashMap<String, String[]>();
Enumeration<String> enu = request.getParameterNames();
if(m.size() > 0 && processParameters(m, enu, mm)) {
ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper(request, mm);
chain.doFilter(wrapRequest, res);
} else {
chain.doFilter(req, res);
}
}
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
}
public boolean processParameters(HashMap<String, String[]> m, Enumeration enu, HashMap<String, String[]> mm) {
System.out.println("[SpecialCharacterFilter] : processParameters *************");
if (m != null && enu != null) {
while (enu.hasMoreElements()) {
String key = (String)enu.nextElement();
String [] values = (String [])m.get(key);
for(int i = 0; i < values.length; i ++) {
if (values[i] != null) {
values[i] = values[i].trim();
values[i] = values[i].replaceAll("&", "&");
values[i] = values[i].replaceAll("<", "<");
values[i] = values[i].replaceAll(">", ">");
values[i] = values[i].replaceAll("\t", " ");
values[i] = values[i].replaceAll("\r\n", "\n");
values[i] = values[i].replaceAll("\n", "<br>");
values[i] = values[i].replaceAll(" ", " ");
values[i] = values[i].replaceAll("'", "'");
values[i] = values[i].replaceAll("\\\\", "\");
}
}
mm.put(key, values);
}
}
return true;
}
}
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
public class SpecialCharacterFilter extends HttpServlet implements Filter {
protected FilterConfig config;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("[SpecialCharacterFilter] : doFilter *************");
HttpServletRequest request = (HttpServletRequest)req;
HashMap<String, String[]> m = new HashMap(request.getParameterMap());
HashMap<String, String[]> mm = new HashMap<String, String[]>();
Enumeration<String> enu = request.getParameterNames();
if(m.size() > 0 && processParameters(m, enu, mm)) {
ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper(request, mm);
chain.doFilter(wrapRequest, res);
} else {
chain.doFilter(req, res);
}
}
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
}
public boolean processParameters(HashMap<String, String[]> m, Enumeration enu, HashMap<String, String[]> mm) {
System.out.println("[SpecialCharacterFilter] : processParameters *************");
if (m != null && enu != null) {
while (enu.hasMoreElements()) {
String key = (String)enu.nextElement();
String [] values = (String [])m.get(key);
for(int i = 0; i < values.length; i ++) {
if (values[i] != null) {
values[i] = values[i].trim();
values[i] = values[i].replaceAll("&", "&");
values[i] = values[i].replaceAll("<", "<");
values[i] = values[i].replaceAll(">", ">");
values[i] = values[i].replaceAll("\t", " ");
values[i] = values[i].replaceAll("\r\n", "\n");
values[i] = values[i].replaceAll("\n", "<br>");
values[i] = values[i].replaceAll(" ", " ");
values[i] = values[i].replaceAll("'", "'");
values[i] = values[i].replaceAll("\\\\", "\");
}
}
mm.put(key, values);
}
}
return true;
}
}
view plaincopy to clipboardprint?
JAVA 类:ParameterRequestWrapper
JAVA 类:ParameterRequestWrapper view plaincopy to clipboardprint?
<PRE class=java name="code">import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[] { (String) v };
} else {
return new String[] { v.toString() };
}
}
public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
</PRE>
<PRE class=java name="code">最后,还是写一下WEB.XML的配置吧:</PRE>
<PRE class=java name="code"><PRE class=xml name="code"> <filter>
<filter-name>specialCharacterFilter</filter-name>
<filter-class>
com.fhn.vismp.common.SpecialCharacterFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>specialCharacterFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>specialCharacterFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping></PRE>
</PRE>
分享到:
相关推荐
- **说明**: 此符号适用于表示没有特殊功能或特征的普通过滤器。在设计图中使用时,可以根据实际情况添加文字标注来进一步说明过滤器的具体类型或规格。 ##### 2. 带污染指示器的过滤器 - **符号**: 在基本过滤器...
标题《xss特殊字符拦截与过滤》以及描述《滤除content中的危险HTML代码,主要是脚本代码,滚动字幕代码以及脚本事件处理代码》提示我们这个文件内容是关于XSS(跨站脚本攻击)防护的编程实现。XSS攻击是指攻击者通过...
在大多数文本分析任务中,非字母或数字字符(如逗号、句号、特殊符号等)往往被视为噪声,需要被移除。这可以通过编写一个简单的函数实现,该函数遍历文本,只保留字母和数字字符,其他都视为无效并剔除。 接下来是...
这通常涉及到去除标点符号、数字和特殊字符,以及处理大小写问题。 3. **关键字识别过滤器**:这个阶段,程序会寻找用户指定的关键词,并记录其出现的位置。 4. **上下文提取过滤器**:一旦找到关键词,过滤器会...
在IT行业中,过滤特殊字符和表情符号是一项常见的需求,特别是在处理用户输入数据或者进行文本解析时。这可以防止潜在的安全问题,比如SQL注入,也可以确保数据的格式正确性,提高用户体验。以下将从标题和描述中...
1. **SQL注入防御**:对所有涉及数据库查询的参数进行检查,禁止包含SQL关键字(如`insert`, `select`, `update`, `delete`, `%`, `*`等)和特殊符号(如`;`, `--`, `/*`, `'`, `"`, `--`)。可以使用预编译的...
在这个上下文中,"java 原码 过滤器"可能是指一个用于处理文本数据的程序,其目标是过滤掉不适当或不文明的词汇,并用特定符号替代,以达到净化输入文本的目的。这样的功能在社交媒体、论坛或任何用户生成内容的平台...
该工具的工作原理是,它作为一个中间过滤器,接收从VS复制的C#代码,识别并转换这些可能导致乱码的特殊字符,然后再将其粘贴到Word中。这样,原本可能出现乱码的部分就能以正确的格式呈现,确保代码的可读性。 在...
Vue.js中的过滤器(Filters)是一种特殊的数据处理方式,允许开发者使用自定义的方法格式化文本。过滤器可以用在两个地方:双花括号插值和v-bind表达式(在Vue 2.0中又称为“Mustache”语法)。过滤器应该被添加在...
在Vue中,过滤器(Filters)是一种特殊的函数,主要用于一些文本格式化的任务。Vue 2.x版本中的过滤器可以用于插值表达式和v-bind表达式中,用于文本格式化。过滤器也可以用在组件内或全局定义。 一、过滤器的使用...
有一些特殊的情况,如自闭合标签 `<img>` 或 ` `,它们没有对应的结束标签。 接下来,我们来看如何编写一个简单的Java方法,使用正则表达式来移除字符串中的HTML标签。以下是一个名为 `RemoveHtmlInString` 的类...
在实际开发中,全局过滤器适合用于通用的文本处理,比如货币格式化、文本转大写、时间格式化等,而私有过滤器则适合于一些特定实例中需要的特殊格式化需求。灵活使用过滤器可以使模板代码更加简洁和易于维护。
6. **添加到EditText**:创建好自定义过滤器后,将其添加到EditText中,通过`editText.setFilters(new InputFilter[]{new EmojiFilter()})`,其中`EmojiFilter`是你实现的过滤器类。 7. **优化性能**:由于过滤过程...
在Vue中,过滤器(filters)是一种特殊的功能,用于转换数据,通常在模板中用于格式化输出。本篇文章将详细介绍Vue过滤器的基本概念、用法以及如何创建自定义过滤器。 ### Vue 过滤器的定义与应用 过滤器在Vue中...
过滤器还可以接收参数,比如货币显示过滤器可以接收货币符号作为参数,如`{{12|currency'¥'}}`,它会将数字12显示为带人民币符号的格式“¥12.00”。 需要注意的是,Vue的过滤器不应该有副作用,因为它们可能在...
除了基本的替换,我们还可以考虑更复杂的过滤场景,比如关键词的前后有特殊字符时的处理,或者使用更复杂的正则表达式模式来避免误匹配。另外,为了提高性能,可以预先编译正则表达式,或者使用缓存策略,以减少重复...
Vue过滤器是一种特殊的函数,用于在模板中转换或处理数据。它们可以被插入到双大括号插值表达式或者v-bind指令中,通过管道符号(|)分隔数据和过滤器。例如:`{{ data | filterName }}`。 在给定的案例中,我们...
过滤器是一种特殊的功能,它可以在数据绑定中使用,以便将数据以特定格式展示给用户。过滤器的定义不依赖于视图层的具体实现,因此可以在任何需要的地方使用过滤器来改变数据的表现形式。 AngularJS提供了多种内置...
双向过滤器是过滤器的一种特殊类型,它不仅影响从模型到视图的数据,还可以处理视图到模型的数据。创建一个双向过滤器示例,名为'currencyDisplay': ```javascript Vue.filter('currencyDisplay', { // model -> ...
清洗过程通常包括替换或删除可能引发XSS攻击的特殊字符,如尖括号 `和 `>`,单引号 `'`,双引号 `"`,以及JavaScript注释符号 `//` 和 `/*` 等。这个过程确保了即使在业务代码中直接使用`request.getParameter()`等...