手机网站发号系统源码,如何注册商标品牌,wordpress中文图片不显示,好看的页面0x00 前言
对于非专业程序员的安全人员来说#xff0c;因为没有代码项目的积累#xff0c;很多知识体系都不完善#xff0c;所以有必要在一些常用的内容进行学习的总结。 在很多的调用链中都会用到**“动态调用setter以及getter”**这个知识点#xff0c;比如经典的CB链因为没有代码项目的积累很多知识体系都不完善所以有必要在一些常用的内容进行学习的总结。 在很多的调用链中都会用到**“动态调用setter以及getter”**这个知识点比如经典的CB链fastjson调用链等。为了避免进行重复的分析所以单独拎出来这个进行详解查漏补缺如有遗漏或者错误的地方还请斧正。
0x01 java中的Bean
首先占用一点位置说一下Bean是什么Bean就是类。很简单但是如果不知道一些文章你就看不太懂。
0x02 静态调用settergetter方法
在Java的类中(bean)中通常属性都是会进行封装的会对外暴露settergetter方法。我们可以通过setter或者getter方法去对属性进行赋值或者读取属性的值。
封装可以参考虽然很浅简单的了解即可。封装-菜鸟教程
这里先建一个Person类展示一下封装。位置JavaBasis/src/main/java/com/dudu/cls/Person.java 在已知对象的setter和getter我们可以通过这样的方式来进行调用
测试Demo位置JavaBasis/src/main/java/com/dudu/demo/PersonDemo.java 0x03 动态调用setter以及getter
有这样一种需求如果我需要进行动态的调用setter和getter方法并且我想要通过外部输入的方式来实现这个过程那么有什么方式可以做到呢。请看下面方式
1.通过反射实现
反射是所有动态调用setter和getter方法的基础也就是底层依赖的内容不论是CB还是fastjson都是万变不离其宗的。
这里通过自己写一个自定义的方法来实现动态的setter和getter对属性进行赋值。
1.1 set方法
首先来看代码位置在./JavaBasis/src/main/java/com/dudu/tools/MyInvoke.java
通过自己写的一个比较简单的demo就可以实现通过输入属性名进行setter赋值 1.2 get方法
getter方法是同理的位置也是在./JavaBasis/src/main/java/com/dudu/tools/MyInvoke.java
通过动态传入属性的名称从而获取属性的值的操作 1.3 Demo测试
测试demo位置com\dudu\demo\MyInvokeDemo.java 2.PropertyUtils
PropertyUtils是commons-beanutils库提供的一个工具类通过此类可以快速的进行适配使用动态调用setter以及getter方法不需要自己处理过多的Bug。
1.1 PropertyUtils的基本使用
通过PropertyUtils这个类中提供的方法就可以实现动态的调用Bean的setter和getter方法只需要名称即可。
首先需要通过maven导入commons-beanutils库
dependenciesdependencygroupIdcommons-beanutils/groupIdartifactIdcommons-beanutils/artifactIdversion1.9.4/version/dependency
/dependenciesPropertyUtils有两个方法一个是setProperty一个是getProperty。这里看一下demo位置JavaBasis/src/main/java/com/dudu/demo/PropertyUtilsDemo.java
通过setProperty方法调用了指定属性的setter方法以及getProperty方法获取了对应属性的值
下面是运行结果。 1.2 PropertyUtils不仅仅是操作属性的值
PropertyUtils不仅仅是操作属性的值这句话怎么理解PropertyUtils可以直接操作以setter或者getter打头的方法。
这里为了区分创建了Person2内容如下图所示位置JavaBasis/src/main/java/com/dudu/cls/Person2.java
这个类中有一个以get打头并且不是操作属性的方法。 通过PropertyUtils.getProperty进行调用。位置JavaBasis/src/main/java/com/dudu/demo/PropertyUtilsDemo2.java 那么如果在get打头的方法中出现可以利用的内容那么就可以走PropertyUtils库。
以上