过滤项目中的非法字符,并且用其他的特殊符号过滤:
WordFilter.java
package com.easyweb.web.character;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;
import java.util.Random;
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.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
* 过来非法字符的过滤器
*
* @author leo
*
*/
public class WordFilter implements Filter {
Properties ps = new Properties(); // properties 属性文件
Collection con = null; // 非法文字集合(从properties属性文件中读取出来)
private String encoding; // 字符编码
private String[] charWorld = new String[] { "~", "@", "#", "$", "%", "^",
"&", "*" }; // 将非法文字替换成 随机字符
Random input = new Random(); // 随机产生器(为上面的随机字符提供下标)
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (encoding != null) {
request.setCharacterEncoding(encoding); // 设置 request字符编码
request = new Request((HttpServletRequest) request);
response.setContentType("text/html;charset=" + encoding); // 设置response字符编码
}
chain.doFilter(request, response);
}
/**
* 过滤器初始化参数,与读取非法字符的properties文件
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
try {
InputStream in = filterConfig.getServletContext().getResourceAsStream("/wordFilter.properties");
ps.load(in);
con = ps.values(); //得到properties中的所有value值,存入collection集合中
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 过滤字符的方法
* @param param
* @return
*/
public String filter(String param) {
// 过滤非法字符的方法
try {
if (param != null && param.length() > 0) {
// 保证传入的字符串不为空和空字符串
Iterator it = con.iterator(); // 迭代器 可以 把collection中的值一条一条的读出来
if (con != null) { // 集合要被初始化
while (it.hasNext()) {
// 判断集合里是否还有值
String value = (String) it.next(); // 取出该值
if (param.indexOf(value) != -1) {
param = param.replace(value, charWorld[input
.nextInt(8)]); // 对非法字符词语进行替换
}
}
}
}
} catch (Exception e) { // TODO Auto-generated catch block
e.printStackTrace();
}
return param;
}
//内部类 为了重写request的getParameter 和 getParameterValues
class Request extends HttpServletRequestWrapper{
public Request(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
//返回值之前 先进行过滤
return filter(super.getParameter(name));
}
@Override
public String[] getParameterValues(String name) {
//返回值之前 先进行过滤
String[] values = super.getParameterValues(name);
for (int i = 0; i < values.length; i++) {
values[i] = filter(values[i]);
}
return values;
}
}
}
分享到:
相关推荐
3. **处理非法字符**:如果发现非法字符,过滤器可以采取不同的策略,例如替换为安全字符、删除非法字符或者直接阻止请求。 4. **传递请求**:处理完后,过滤器将修改后的请求传递给下一个过滤器或者直接传递到目标...
非法字符过滤是Web应用安全的一个重要方面。过滤器可以用来检测和阻止可能包含恶意代码的输入,如SQL注入或跨站脚本(XSS)攻击。例如,我们可以自定义一个Filter类,检查请求参数,如果发现非法字符或敏感词汇,就...
本文将深入探讨标题和描述中涉及的几个关键知识点:过滤器乱码问题、非法字符过滤、权限控制以及病毒和HTML/JS脚本过滤。 1. **过滤器乱码问题**: 在Web应用中,乱码问题经常出现于数据的输入和输出阶段。过滤器...
然而,为了保证应用程序的安全性和稳定性,通常需要对用户输入的数据进行过滤和验证,这就是JSP字符过滤器的作用。字符过滤器主要用于防止恶意用户通过提交特殊字符或者执行SQL注入、跨站脚本攻击(XSS)等行为,保护...
在JAVA Web开发中,过滤器(Filter)是一个至关重要的组件,它主要负责在请求被Servlet处理之前或之后执行一些预处理或后处理操作。过滤器是JAVA Servlet API的一部分,通过实现javax.servlet.Filter接口来创建...
可以使用预编译的PreparedStatement来防止SQL注入,或者使用正则表达式检查并替换非法字符。 2. **XSS(Cross-Site Scripting)防御**:对所有输出到页面的用户输入进行转义,确保不会执行任何JavaScript代码。可以...
Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许我们在数据处理前后插入自定义逻辑,对请求和响应进行拦截、修改或增强。本教程将深入讲解Java过滤...
在Java Web开发中,过滤器(Filter)是一种非常重要的技术,它能够对用户的请求和响应进行预处理或后处理,从而实现各种功能需求,例如设置缓存策略、登录验证、字符编码转换等。下面我们将详细探讨标题和描述中提到...
// 实现检查逻辑,如:非法字符检测、SQL关键字检测等 } // 其他Filter接口方法实现... } ``` `isSuspicious`方法可以根据实际需求进行实现,例如检查字符串是否包含SQL关键字、特殊字符等。此外,还可以使用...
例如,在处理用户的输入数据时,我们可以使用过滤器来过滤掉一些非法字符,以避免系统的安全性问题。 四、图像格式转换 过滤器可以对响应的内容进行图像格式转换。例如,在Web应用程序中,我们可以使用过滤器来将...
过滤器和验证码是Java Web开发中的重要组成部分,主要用于提高应用程序的安全性和用户体验。下面将详细讲解这两个概念。 2.1.1 过滤器简介 过滤器(Filter)是Java Servlet API的一部分,它允许开发者在HTTP请求...
接下来,我们要讨论的是过滤器(Filter)在Java Web应用程序中的角色。在Java Servlet规范中,过滤器是一个接口,允许开发者在请求到达目标Servlet之前或之后拦截和处理请求和响应。在XSS防护上下文中,过滤器可以...
【Java Filter过滤器详解】 Java Filter是Java Servlet技术的一部分,它允许开发者在Servlet容器中对HTTP请求和响应进行拦截处理,实现数据过滤、权限控制、日志记录等多种功能。Filter的生命周期包括三个主要方法...
描述中的"字符过滤字符过滤 字符过滤字符过滤字符过滤字符过滤字符过滤字符过滤字符过滤"虽然被重复,但我们可以理解为强调字符过滤的重要性以及它在不同场景下的应用。例如,在网页表单提交时,需要过滤特殊字符以...
总的来说,"基于KDS的非法字符检测器"是一个用于确保数据质量的工具,它利用特定的规则(仅允许英文和数字)来过滤输入,防止非法字符的出现。这种工具在数据录入、用户注册、密码安全等场景中非常常见,有助于维护...
在Java Web开发中,Servlet过滤器(Filter)是不可或缺的一部分,它允许开发者在请求到达Servlet之前或响应离开Servlet之后对其进行处理。Servlet过滤器是按照指定的配置顺序进行调用的,能够实现数据的预处理、后...
Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许在请求被处理之前或之后执行特定的逻辑,例如数据验证、登录验证、字符编码转换等。在这个场景中,...
除了设置字符编码,中文过滤器还可以扩展其他功能,如检查请求参数是否包含非法字符、进行URL重写等。通过这种方式,我们可以确保JavaWeb应用在处理中文数据时的稳定性和兼容性。 总之,JavaWeb中文过滤器是解决...
### 拦截器与过滤器的区别 #### 一、概念理解 - **拦截器**:拦截器(Interceptor)主要用于AOP(面向切面编程)领域,在Java Web开发中主要应用于Struts2框架中,其核心是利用Java的反射机制实现特定功能的执行。...