package com.jingdu.common;
创新互联主营名山网站建设的网络公司,主营网站建设方案,重庆APP开发,名山h5小程序制作搭建,名山网站营销推广欢迎名山等地区企业咨询
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;
public class IllegalCharacterFilter implements Filter {
private String[] characterParams = null;
private boolean OK=true;
public void init(FilterConfig config) throws ServletException {
// if(config.getInitParameter("characterParams").length()1)
// OK=false;
// else
// this.characterParams = config.getInitParameter("characterParams").split(",");
System.out.println("初始化");
}
@SuppressWarnings("unchecked")
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest servletrequest = (HttpServletRequest) request;
HttpServletResponse servletresponse = (HttpServletResponse) response;
String param = "";
String paramValue = "";
//设置请求编码格式
servletresponse.setContentType("text/html");
servletresponse.setCharacterEncoding("UTF-8");
servletrequest.setCharacterEncoding("UTF-8");
java.util.Enumeration params = request.getParameterNames();
//循环读取参数
while (params.hasMoreElements()){
param = (String) params.nextElement(); //获取请求中的参数
String[] values = servletrequest.getParameterValues(param);//获得每个参数对应的值
for (int i = 0; i values.length; i++) {
paramValue = values[i];
//转换目标字符变成对象字符,可以多个。后期扩展特殊字符库用于管理
paramValue = paramValue.replaceAll("'","");
paramValue = paramValue.replaceAll("@","");
paramValue = paramValue.replaceAll("胡锦涛","***");
//这里还可以增加,如领导人 自动转义成****,可以从数据库中读取非法关键字。
values[i] = paramValue;
}
//把转义后的参数重新放回request中
request.setAttribute(param, paramValue);
}
//继续向下 执行请求,如果有其他过滤器则执行过滤器
arg2.doFilter(request, response);
}
public void destroy() {
// TODO Auto-generated method stub
}
}
很容易,首先建立一个字符串数组,也就是你需要过滤掉的html标签String[] filterArrays = new String[]{"html","/html","table","/table".....一系列有关html标签的东西}
当你得到一个html代码的字符串时你可以循环遍历上面的数组,然后调用String自带的方法replaceAll();
我给你简单的示范一下啊
String str = "dfgdgdfgdgd";//需要过滤的带有HTML标签的代码字符串
for(int i=0;ifilterArrays.length;i++){
if(str.indexOf(filterArrays[i])!=0){
str = str.replaceAll(filterArrays[i],"");//将html标签替换成了空格
}
}
这样就搞定了,主要是你需要在filterArrays中增加你需要过滤的字符串,当然还会有更好的办法,可以不用增加这样的数组,因为出现""必然会有"",或者"/"这样的标签,但是这样做可能会将一些无关的也过滤掉了,总之两种方法都可以,第一种呢我都给你写了例子!祝你成功啊
弄过滤器,要实现filter接口,下面我写一个小例子
主要是用过滤器处理中文编码,至于你要用来做什么,你再自己写。。。比如权限控制,登录验证,之类
//下面这是一个类。。。。
import java.io.IOException;
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;
public class EncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");//处理编码
response.setCharacterEncoding("GBK");//处理编码
chain.doFilter(request, response);//让过滤器执行下一个请求
}
public void destroy() {}
public void init(FilterConfig arg0) throws ServletException {}
}
//下面这个是在web.xml下的配置
filter
filter-nameencoding/filter-name
filter-class
刚刚创建的那个实现filter接口的类的位置
例如:com.temp.filter.EncodingFilter
/filter-class
/filter
filter-mapping
filter-nameencoding/filter-name
url-pattern*.jsp这个是以jsp为后缀的文件都拦截下来/url-pattern
/filter-mapping
可以写多个的filter-mapping来配置你所要拦截的东西
恩,有点唠叨,希望可以帮助到你
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
if (null != encoding) {
HttpServletRequest request = (HttpServletRequest)srequest;
HttpServletResponse response = (HttpServletResponse)sresponse;
// 对请求进行编码设置
request.setCharacterEncoding(encoding); //把请求用指定的方法编码
response.setContentType("text/html");
response.setCharacterEncoding(encoding); //把返回响应指定 编码方式
System.out.println("------------过滤编码-------------" + encoding);
}
// 把处理权限交给下一个过滤器
chain.doFilter(srequest, sresponse);
}//这是核心方法
正好项目中有用到
看到Servlet,可以明确这是个web项目。
所以你需要新建一个web工程,然后在web.xml中配置该过滤器。
因为你遗漏了重要的一步。正确的方法如下:
if(encoding!=null){
//设置request字符编码
request.setCharacterEncoding(encoding);
//设置response字符编码
response.setContentType("text/html;charset="+encoding);
response.setCharacterEncoding(encoding);
}
//传递给下一个过滤器
chain.doFilter(request, response);