过滤器-无效数据过滤

摘要:
=null&&!--2.无效数据过滤
packagecom.loaderman.demo.b_filter_data;
importjava.io.IOException;
importjava.lang.reflect.InvocationHandler;
importjava.lang.reflect.Method;
importjava.lang.reflect.Proxy;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
 * 无效数据过滤
 *
 */
public class DateFilter implementsFilter {
    //初始化无效数据
    private List<String>dirtyData;
    @Override
    public void init(FilterConfig filterConfig) throwsServletException {
        //模拟几个数据
        dirtyData = new ArrayList<String>();
        dirtyData.add("NND");
        dirtyData.add("炸使馆");
    }
    @Override
    public voiddoFilter(ServletRequest req, ServletResponse res,
                         FilterChain chain) throwsIOException, ServletException {
        //转型
        final HttpServletRequest request =(HttpServletRequest) req;
        HttpServletResponse response =(HttpServletResponse) res;
        //一、处理公用业务
        request.setCharacterEncoding("UTF-8");                    //POST提交有效
        response.setContentType("text/html;charset=UTF-8");
        HttpServletRequest proxy =(HttpServletRequest) Proxy.newProxyInstance(
                request.getClass().getClassLoader(),         //指定当前使用的累加载器
                new Class[]{HttpServletRequest.class},         //对目标对象实现的接口类型
                new InvocationHandler() {                    //事件处理器
@Override
                    publicObject invoke(Object proxy, Method method, Object[] args)
                            throwsThrowable {
                        //定义方法返回值
                        Object returnValue = null;
                        //获取方法名
                        String methodName =method.getName();
                        //判断:对getParameter方法进行GET提交中文处理
                        if ("getParameter".equals(methodName)) {
                            //获取请求数据值【 <input type="text" name="userName">】
                            String value = request.getParameter(args[0].toString());    //调用目标对象的方法
                            //获取提交方式
                            String methodSubmit = request.getMethod(); //直接调用目标对象的方法
                            //判断如果是GET提交,需要对数据进行处理  (POST提交已经处理过了)
                            if ("GET".equals(methodSubmit)) {
                                if (value != null && !"".equals(value.trim())){
                                    //处理GET中文
                                    value = new String(value.getBytes("ISO8859-1"),"UTF-8");
                                }
                            }
                            //中文数据已经处理完: 下面进行无效数据过滤
                            //【如何value中出现dirtyData中数据,用****替换】
                            for(String data : dirtyData) {
                                //判断当前输入数据(value), 是否包含无效数据
                                if(value.contains(data)){
                                    value = value.replace(data, "*****");
                                }
                            }
                            //处理完编码、无效数据后的正确数据
                            returnvalue;
                        }
                        else{
                            //执行request对象的其他方法
                            returnValue =method.invoke(request, args);
                        }
                        returnreturnValue;
                    }
                });
        //二、放行 (执行下一个过滤器或者servlet)
        chain.doFilter(proxy, response);        //传入代理对象
}
    @Override
    public voiddestroy() {
    }
}
packagecom.loaderman.demo.b_filter_data;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public class DisServlet extendsHttpServlet {
    public voiddoGet(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, IOException {
        //获取请求数据
        String content = request.getParameter("content");
        //保存到request
        request.setAttribute("content", "Content:" +content);
        //转发
        request.getRequestDispatcher("/dis.jsp").forward(request, response);
    }
    public voiddoPost(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, IOException {
        this.doGet(request, response);
    }
}
 <!-- 2. 无效数据过滤器配置 -->
    <filter>
        <filter-name>dataFilter</filter-name>
        <filter-class>com.loaderman.demo.b_filter_data.DateFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dataFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

免责声明:文章转载自《过滤器-无效数据过滤》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java web开发——文件的上传和下载ibatis DTD 2.0 3.0下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

微信扫码网页登录,redirect_uri参数错误解决方法

对于微信开放平台[管理中心/应用程序详细信息]中设置的[开发信息][授权回调域],只需填写域名,无需https://,也无需特定页面。您不需要填写完整的请求路径,如图所示:https://open.weixin.qq.com/connect/qrconnect?appid=您的APPID&direct_Uri=回调和响应的特定地址_type=code...

CAS单点登录------未认证授权服务

问题背景:之前我使用的127.0.0.1进行CAS直接url进行过滤!后来我用nginx进行反向代理出现问题:如下图第一眼,就在内心想,草这什么鬼!调试了五分钟发现还是不行!  网上各种教程!  半小时过去了!我吧配置文件自己看看!    出现这样问题:原因是CAS 的服务认真之前先有个REgx的正则判断,目录如上看这个正则时候,我瞬间明白了,我下面这个问题...

等保2.0四级安全要求

平等保护2.0四级安全要求四级安全保护能力:应能够在统一的安全战略下,防止恶意攻击、严重自然灾害和来自国家一级、敌对组织和资源丰富的威胁源的其他严重危害造成的资源损害。它应该能够及时检测和监控攻击和安全事件,所有功能都可以快速恢复。以下粗体字段是平等保护的第4级和第3级之间的差异,应予以更多注意。...

pycharm最新版本激活码(永久有效) python安装教程

输入python以查看当前版本的python。您可以输入“print'helloworld”并单击下载以启动PyCharm://pan.baidu.com//1eVdm4dUPKn3ZY_Xj kqNXw提取代码:l83f2,下载破解补丁(版本2018.3.5)下载链接至地址:...

js学习-es6实现枚举

最近,我大部分时间都在写dart,突然使用了js。我发现js不能直接声明枚举。目录枚举功能对象冻结()符号实现反映了不可更改值的唯一性。请注意,枚举特性枚举值不能重复,也不能修改。Switchcase可以直接判断对象。冻结()对象。方法可以冻结对象。无法更改实现constEnumSex=Object。冷冻枚举性别。人=1;安慰日志;//符号(男性)表示值co...

谷歌浏览器中预览海康大华等监控视频的思路与方法

本人近些年来对海康,大华,宇视等视频厂商做过一些视频对接的开发,但始终存在一个问题,在谷歌浏览器中如何进行视频监控的预览。本文将主要解决在谷歌,火狐等非IE浏览器中预览视频监控问题,给广大开发者提供一个思路方法。现在谷歌浏览器中现已不支持ActiveXObject的创建及调用,这是由于chrome浏览器在45版本后不再提供对npapi插件的支持。这种方式基本...