Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 648|回复: 0

java利用反射过滤对象的字符串字段中的HTML字符 实例

[复制链接]

该用户从未签到

发表于 2011-9-18 13:19:21 | 显示全部楼层 |阅读模式
对于封装好的 form 以及 pojo 层对象的Strng字段进行HTML字符过滤。
思路:
1 通过传入对象 ,对象类型名, 获取出对象自己的getter and setter 方法, 并将其对应到 map 中
2 判断 其get方法的返回值类型, 若是string 类型 则调用对应属性的getter
3 将得到的字符串通过StringFilte 进行过滤后 ,调用对象的setter 将其保存到对象中完成过滤。


import java.util.*;
import java.lang.reflect.*;
public class SuperFilter {
  private Object obj; // 传入的对象
  private List< String> Methodname = new ArrayList< String>(); // 方法名
  private Map< String, Mobj> map = new HashMap< String, Mobj>();
  private List< Method> getList = new ArrayList< Method>(); // get 方法列表
  private List< Method> setList = new ArrayList< Method>();// set 方法列表
  public SuperFilter(Object obj, Class< ?> cla) {
    this.obj = obj;
    String style = cla.getName();
    MethodSorter(obj, style);
    MethodFilter();
  }
  public SuperFilter(Object obj, String style) {
    this.obj = obj;
    MethodSorter(obj, style);
    MethodFilter();
  }
  private void MethodSorter(Object o, String name) {
    Method methods[] = null;
    try {
      methods = Class.forName(name).getDeclaredMethods();
    } catch (SecurityException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    for (int i = 0; i < methods.length; i++) {
      Method m = methods;
      if (m.getName().startsWith("get")) {
        getList.add(m);
        String tempname = m.getName();
        Methodname.add(tempname.substring(3));
      }
      if (m.getName().startsWith("set")) {
        setList.add(m);
      }
    }
    for (int i = 0; i < Methodname.size(); i++) {
      String temp = Methodname.get(i);
      for (int m = 0; m < setList.size(); m++) {
        Method met = setList.get(m);
        if (met.getName().endsWith(temp)) {
          map.put(temp, new Mobj(getList.get(i), met));
        }
      }
    }
  }
  public void MethodFilter() {
    for (int i = 0; i < Methodname.size(); i++) {
      Mobj mobj = map.get(Methodname.get(i));
      Method methodget = mobj.getGetMethod();
      Method methodset = mobj.getSetMethod();
      try {
        if (String.class.isInstance(methodget.invoke(obj, null))) {
          String temp = (String) methodget.invoke(obj, null);
        //  System.out.println("~~~~~~~~~~~~~~~~~~");
          System.out.println(temp);
        //  System.out.println("~~~~~~~~~~~~~~~~~~");
          String tempAfterFilter = StringFilter.filterHtml(temp);
          methodset.invoke(obj, tempAfterFilter);
        }
      } catch (IllegalArgumentException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      } catch (InvocationTargetException e) {
        e.printStackTrace();
      }
    }
  }
  protected class Mobj {
    Method getMethod;
    Method setMethod;
    public Mobj(Method getMethod, Method setMethod) {
      this.getMethod = getMethod;
      this.setMethod = setMethod;
    }
    public Method getSetMethod() {
      return setMethod;
    }
    public void setSetMethod(Method setMethod) {
      this.setMethod = setMethod;
    }
    public Method getGetMethod() {
      return getMethod;
    }
    public void setGetMethod(Method getMethod) {
      this.getMethod = getMethod;
    }
  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:29 , Processed in 0.301845 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表