在页面显示前对将页面非法符过滤掉
IllegalCharacterFilter.java
package *;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
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.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import *.IllegalWordUtil;
public class IllegalCharacterFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest servletrequest = (HttpServletRequest) request;
HttpServletResponse servletresponse = (HttpServletResponse) response;
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
WrapperImpl wrapper = new WrapperImpl(servletresponse);
chain.doFilter(request, wrapper);
PrintWriter out = response.getWriter();
out.println(IllegalWordUtil.filterIllegalWords(wrapper.toString()));
}
@Override
public void init(FilterConfig config) throws ServletException {
}
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);
}
}
}
IllegalWordUtil.java
package *;
import java.io.IOException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class IllegalWordUtil{
protected static final Logger logger = LoggerFactory.getLogger(IllegalWordUtil.class);
private final static String pattern;
private final static String replacement;
private final static String illegalWords;
private final static String illegalWordRegx;
private static Pattern patterns = null;
static{
Properties properties = new Properties();
try{
properties.load(IllegalWordUtil.class.getResourceAsStream("/illegal.keywords.properties"));//加载非法关键字资源文件
}catch(IOException ioe){
ioe.printStackTrace();
logger.error("Cound not load illegal.keywords.properties");
throw new RuntimeException("Cound not load illegal.keywords.properties");
}
//取出所有非法关键字
illegalWords = properties.getProperty("words", "");
//以,为分格符取出每个非法关键字
pattern = properties.getProperty("pattern", ",");
//将非法字符替换成***
replacement = properties.getProperty("replacerex", "***");;
illegalWordRegx = "(" + illegalWords.trim().replaceAll(pattern, "|") + ")";
patterns = Pattern.compile(new String(illegalWordRegx.toString()));
}
public static String filterIllegalWords(String sentence) {
Matcher m = patterns.matcher(sentence);
return m.replaceAll(replacement);
}
public static boolean isIllegalWord(String word) {
Matcher m = patterns.matcher(word);
return m.find(0);
}
}
web.xml
<filter>
<filter-name>IllegalCharacterFilter</filter-name>
<filter-class>desirelist.web.servlet.IllegalCharacterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
本文将深入探讨标题和描述中涉及的几个关键知识点:过滤器乱码问题、非法字符过滤、权限控制以及病毒和HTML/JS脚本过滤。 1. **过滤器乱码问题**: 在Web应用中,乱码问题经常出现于数据的输入和输出阶段。过滤器...
本篇文章将深入探讨“web开发中必不可少的过滤器”,以及如何利用过滤器解决乱码及非法字符串转换的问题。 首先,让我们了解过滤器的基本概念。在Java Servlet规范中,过滤器是通过实现javax.servlet.Filter接口来...
除了上述方法,还可以使用其他防御策略,例如使用HTTP头部的`Content-Security-Policy`来限制浏览器只接受特定来源的脚本,或者使用输入验证库来限制和格式化用户输入,防止非法字符或语法的注入。 总结来说,...
过滤非法关键字过滤器用于防止恶意用户通过提交含有非法关键字的数据来攻击网站。实现方法如下: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.util.Set; import ...
例如,在处理用户的输入数据时,我们可以使用过滤器来过滤掉一些非法字符,以避免系统的安全性问题。 四、图像格式转换 过滤器可以对响应的内容进行图像格式转换。例如,在Web应用程序中,我们可以使用过滤器来将...
过滤器也可以用于检查请求参数中的特殊字符或者非法输入,确保数据的安全性。例如,你可以创建一个过滤器来移除或替换用户输入中的危险字符: ```java public class InputSanitizerFilter implements Filter { ...
总结起来,Servlet过滤器是Java Web开发中的强大工具,能够帮助我们执行预处理和后处理任务,如验证非法字符、控制用户访问权限以及统一数据编码。通过合理配置和组合使用过滤器,我们可以构建出安全、高效且易于...
- 使用场景:适用于所有HTTP请求,如统一设置字符集、登录验证、过滤非法请求等。 - 特点:依赖于Servlet容器,可对所有请求生效。 #### 四、关键区别 1. **依赖关系**: - **拦截器**不依赖于Servlet容器,...
3. 非法字符:对用户输入进行校验,防止SQL注入等安全问题。 4. 数组类型:当参数值为数组时,需要注意处理方式。 ### 4. config解析 在Web应用中,配置文件(如application.properties或application.yml)通常...
常用的编码方法是`URLEncoder.encode()`,它可以将字符串转换成合法的URL格式,避免因非法字符引发的问题。 通过以上知识点的总结,我们可以看到方立勋servlet学习笔记涵盖了Servlet的基础概念、配置与部署、资源...
- **输入验证**:对所有用户输入进行严格的验证和过滤,避免非法字符和表达式。 - **使用安全配置**:启用Struts2的安全配置选项,如使用XWork拦截器来阻止恶意请求。 7. **应急响应** 发现系统受此漏洞影响后,...
Filter有多种分类,如用户授权Filter:检查用户请求,根据请求过滤用户非法请求;日志Filter:记录某些特殊的用户请求;解码Filter:对非标准编码的请求解码。 Interceptor和Filter的区别: 1. Filter是基于函数回...
"防盗链filter"是一种常见的Java技术,用于防止网站的资源(如图片、视频、音频等)被其他未经授权的网站非法引用,即“盗链”。本篇文章将深入探讨Java防盗链filter的工作原理、实现方式以及其在实际应用中的重要性...
另外,对于用户输入的数据,应当进行校验和过滤,防止非法字符或恶意代码的提交。在登录失败的情况下,不应显示具体的错误信息(如“用户名不存在”),以避免暴露系统的敏感信息。 至于提供的压缩包文件`servlet_...
例如,可以创建一个过滤器来统一设置所有请求的字符编码,或者过滤非法请求。\n\n5. Servlet事件监听器\nServlet事件监听器用于监听ServletContext、HttpSession和ServletRequest等域对象的生命周期和属性变更。监听...
在实际开发中,需要注意处理可能的空值、非法数据以及安全性问题,例如检查参数是否有效、过滤输入以防止SQL注入等。`reqresp_demo2`这个示例项目可能包含了如何在实际场景中使用这些方法的代码和解释,通过学习和...
- Filter接口:用于拦截请求和响应,实现预处理和后处理功能,如登录检查、字符编码转换等。 - Filter链:多个Filter按照配置顺序依次执行。 7. **监听器(Listener)** - 监听器接口:如HttpSessionListener、...
- 安全过滤:Filter可以检查请求参数,阻止非法或恶意请求,例如防止SQL注入。 - 日志记录:Filter可用于记录请求和响应的详细信息,帮助调试和性能分析。 - 权限控制:Filter可以实现基于角色的访问控制(RBAC)...
1. **安全控制**:过滤非法请求,进行身份验证和权限检查。 2. **日志记录**:记录请求信息,便于调试和分析应用性能。 3. **数据过滤**:对请求参数进行处理,如编码解码、格式转换等。 4. **缓存管理**:控制缓存...
需要检查项目中的过滤器配置,特别是涉及到安全过滤(如AclFilter和RequestFilter)以及字符编码转换的过滤器(如CharacterEncodingFilter)。确保这些过滤器不会干扰文件上传请求的正常处理。例如,确保在过滤链中...