美文网首页
动态代理模式(w10_2)匿名内部类形式

动态代理模式(w10_2)匿名内部类形式

作者: 康明 | 来源:发表于2017-01-04 21:33 被阅读0次
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here

        //处理poset提交方法,参数的中文乱码
        request.setCharacterEncoding("utf8");
        //处理响应内容的中文乱码
        response.setContentType("text/html;charset=utf8");
        
        //动态代理
        //创建一个HttpServletRequest的对象的代理对象
        
        //第一个参数:代理的对象的类加载器
        //第二个参数,代理的对象的Class类型
        //第三个参数,InvocationHandler的对象,重写invoke方法,实现对代理的对象的某些方法的功能上的扩展(执行被代理的对象的 接口方法)
        HttpServletRequest proxyRequset = (HttpServletRequest)Proxy.newProxyInstance(
                HttpServletRequest.class.getClassLoader(), 
                new Class[]{HttpServletRequest.class}, 
                new InvocationHandler() {
                    
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        // TODO Auto-generated method stub
                        
                        //获取方法名
                        String mName = method.getName();
                    
                        //对getParameter方法进行功能扩展
                        if(mName.equals("getParameter")){
                            String v = request.getParameter((String)args[0]);
                            if(v == null || v.equals("")){
                                return null;
                            }
                            //获取表单提交方法
                            String m = ((HttpServletRequest)request).getMethod();
                            //处理get提交方式的中文乱码
                            if(m.equalsIgnoreCase("get")){
                                v = new  String(v.getBytes("iso-8859-1"), "utf8");
                            }
                            
                            //处理敏感词
                            for(String str : dirtyList){
                                if(v.contains(str)){
                                    v = v.replace(str, "***");
                                }
                            }
                            
                            return v;
                        }else{
                            //其他不需要特殊处理的方法,直接调用
                            return method.invoke(request, args);
                        }
                        
                    }
                });
        
        // pass the request along the filter chain
        //将httpservletrequest的代理对象传递给要访问的资源
        chain.doFilter(proxyRequset, response);
    }

相关文章

  • 动态代理模式(w10_2)匿名内部类形式

  • 动态代理模式(非匿名内部类)

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • 代理模式

    想要了解动态代理模式,首先要理解基本的静态动态模式的意思和组织形式。 一、代理模式 为什么要用 被代理的对象可以是...

  • Java 内部类

    java内部类分为成员内部类、局部内部类、匿名内部类、静态内部类四种。 1.成员内部类 内部类以外部类成员形式定义...

  • 14.动态代理

    代理模式 java动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandle...

  • Java匿名内部类

    导语 学完匿名内部类就懂的情书。 主要内容 接口与抽象类和匿名内部类的关系 具体内容 匿名内部类也就是没有名字的内...

  • java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内...

  • Java 内部类

    内部类包括成员内部类、方法内部类、*静态内部类、匿名内部类*。 内部类的作用 由于内部类的实现和外部类没有关系,内...

  • java 匿名内部类

    匿名内部类的创建形式: new 父类构造器(参数列表)| 实现接口(){ } 匿名内部类必须要继承一个父类或者实现...

网友评论

      本文标题:动态代理模式(w10_2)匿名内部类形式

      本文链接:https://www.haomeiwen.com/subject/jujavttx.html