敏感字符过滤器(filter)
一.敏感字符过滤成(*******)
作用:将用户发送的内容先做处理在上传到服务器中,一般用于敏感字符的处理
适用范围:评论、弹幕等
1. 创建过滤器filter包新建CharFilter类
package filter;
import util.MyRequest01;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.Set;
@WebFilter(filterName = "CharFilter",urlPatterns = "/CharServlet")
public class CharFilter implements Filter {
private Properties p = new Properties();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化,读取文件,存放的;ist中
InputStream stream=filterConfig.getServletContext().getResourceAsStream("/WEB-INF/text.txt");
InputStreamReader is=null;
BufferedReader reader=null;
try {
is=new InputStreamReader(stream,"utf-8");
reader=new BufferedReader(is);
String txt="";
while ((txt=reader.readLine())!=null){
list.add(txt);
System.out.println(txt);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
is.close();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
request.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println(filterName+"过滤器销毁");
}
}
2. 创建工具包util新建MyRequest类
package util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.ArrayList;
import java.util.List;
public class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest httpServletRequest;
private List<String> list = new ArrayList<>();
public MyRequest(HttpServletRequest request, List list) {
super(request);
httpServletRequest = request;
this.list = list;
}
@Override
public String getParameter(String name) {
String txt = httpServletRequest.getParameter(name);
//
if(txt!=null&&!txt.isEmpty()){
for (int i=0;i<list.size();i++){
if(txt.indexOf(list.get(i))!=-1){
txt = txt.replaceAll(list.get(i),"***");
}
}
}
return txt;
}
}
3.新建txt文档,里面写上你要过滤的字符
text.txt里面包括
傻逼
sb
逗比
TMD
这些就是你要过滤的敏感字符
二·.敏感字符过滤成好听的文字
1. 创建过滤器filter包新建CharFilter01类
package filter;
import util.MyRequest01;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.Set;
@WebFilter(filterName = "CharFilter",urlPatterns = "/CharServlet")
public class CharFilter implements Filter {
private Properties p = new Properties();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
InputStream stream=filterConfig.getServletContext().getResourceAsStream("/WEB-INF/char.properties");
try {
p.load(stream);
} catch (IOException e) {
e.printStackTrace();
}
Set<Object> keys=p.keySet();
for(Object key : keys){
//根据key得到属性文件中的value
String value=null;
value=p.getProperty(key.toString());
System.out.println(key+"---"+value);
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
request.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
MyRequest01 myRequest01=new MyRequest01(request,p);
filterChain.doFilter(myRequest01,servletResponse);
}
@Override
public void destroy() {
}
}
2.创建工具包util新建MyRequest01类
package util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Properties;
import java.util.Set;
public class MyRequest01 extends HttpServletRequestWrapper {
private HttpServletRequest httpServletRequest;
private Properties p = new Properties();
public MyRequest01(HttpServletRequest request, Properties p) {
super(request);
this.p=p;
httpServletRequest = request;
}
@Override
public String getParameter(String name) {
String txt = httpServletRequest.getParameter(name);
if(txt!=null&&!txt.isEmpty()){
Set<Object> keys= p.keySet();
for(Object key: keys){
if(txt.indexOf(key.toString())!=-1){
txt=txt.replaceAll(key.toString(),p.getProperty(key.toString()));
}
}
}
return txt;
}
}
以上这些你可以写一个jsp页面传值到servlet在页面上显示出来,这样就大功告成啦!