【问题标题】:what is the alternative for dynamic class loading in java?java中动态类加载的替代方法是什么?
【发布时间】:2017-11-03 14:02:26
【问题描述】:

我正在使用反射在运行时加载类,但声纳规则指向 它作为漏洞攻击我正在考虑使用 ByteBuddy,bytebuddy 库可以帮助我吗?

ClassLoader classLoader = MyClass.class.getClassLoader();
Class<?> classsName = classLoader.loadClass(className);

【问题讨论】:

  • 在你上面的例子中没有反射,只是动态类加载。而且您的第二行没有意义(className = loadClass(className))-但也许声纳抱怨您从不安全的来源获得className。 Bytebuddy 无济于事 - 您仍然需要动态加载类。
  • 从加载的类中,我只想让一种方法可供公众访问,并且我想调用。
  • methodCall.setAccessible(true); methodCall.invoke(getmethod, "text");
  • 如果和已知类(MyClass)在同一个ClassLoader中,为什么需要动态加载呢?我怀疑你可以在没有动态构建的类名的情况下实现你的目标。
  • 为了证明我已经给出了 MyClass 但我需要加载不同的类。

标签: java reflection cglib byte-buddy


【解决方案1】:

我不确定它是否会阻止声纳警报,但我宁愿使用Class.forName(String),因为它将进行所有可能需要的类初始化:

Class<?> cls = Class.forName(className);

请注意,此方法已重载,因此您可以指定类加载器或是否需要初始化该类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多