面试准备和日常编码所需一文打尽
后,Friedman为了安抚用户甚至还吟了首勃朗宁的诗:一切都很好,情况也很正常,云雀展翅飞翔,蜗牛在荆棘上爬动,世上一切顺当! 不过,开发者们对此回应并不买账。从他们的吐槽来看,Github代码管理系统早已存在多项Bug,比如提交代码时,Git不会对用户身份进行核验。这一点会给源代码带来极大的安全风险,但GitHub平台对此从未重视过。 另外,有人表示正是利用这一缺陷,不明人士才得以冒充Friedman身份发布了机密代码。 源代码管理器Git存在Bug Git,是Github用来托管源代码的分布式版本管理系统,简单来说,就是源代码管理器。
它的设计存在一种明显的缺陷,即没有为防止其他用户盗用提供太多的保护。具体来说,Git 上传代码文件的过程,类似于发送电子邮件。用户可以在user.name和user.email字段中输入任何信息。这一过程中,如果两个字段之间不采用GPG密钥关联,系统就不会核查它的指定来源,那么信息造假会变得非常容易。 因为 ByteBuddy 自己做为一个 Jar 也 Attach ,然后再将其它后续的增强代码加入,像不像「特洛伊木马」 :) 另外, ByteBuddy 还支持类似于 AOP 的 Advice实现,在拦截指定方法后可以实现OnMethodEnter 和 OnMethodExit 的控制,在这其中,可以完成绕过用户代码,执行自定义内容的逻辑。 咱们在开始的时候,还提到了代码的生成。这在 ByteBuddy 看来也是易如反掌。
和上面的代码一样,先要拿到 AgentBuilder,之后在执行 tranform的时候,直接指定方法名,以及对应的参数,访问控制符等。 Byte Buddy is a code generation and manipulation library for creating and modifying Java classes during the runtime of a Java application and without the help of a compiler. Other than the code generation utilities that ship with the Java Class Library, Byte Buddy allows the creation of arbitrary classes and is not limited to implementing interfaces for the creation of runtime proxies. Furthermore, Byte Buddy offers a convenient API for changing classes either manually, using a Java agent or during a build. 阅读理解开始。重点你一定会看到了:
作者贴心的加了一段小字来描述框架的优势。选重点的说就是:
我自己认为该把这点也加上,不写 Java Agent 也可以 Attach 到 JVM 上,把 ByteBuddy 自己当成一个Agent,运行时直接install。Cool。 不写JVM Agent 也能对类拦截和修改,我们来认识下揭开字节码修改黑魔法的家伙。 为了对 Class 进行一些操作,我们一般都离不了 JVM Agent。不管是启动时直接连接,还是运行时动态的 Attach到对应的JVM 上,都需要 Agent。也就是我们熟悉的premain 和 agentmain 的触发入口,通过它们,我们才能拿到 Instrumentation,从而进行 transform和 redeine。 但这个东西的使用,给人总是「阳春白雪」的感觉,让人觉得是黑魔法一样,一般不会轻易尝试使用。 有了ByteBuddy,就不用再羡慕一些框架的「运行时增强」,「动态织入」等等,都可以实现。 如何上手呢? 只需要下载 Jar 文件或者 Maven 添加依赖之后就能狂奔了。
比如官方的这个 HelloWorld (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |