代码之家  ›  专栏  ›  技术社区  ›  Oleg Pavliv

如何通过调用反射方法检测何时修改属性

  •  5
  • Oleg Pavliv  · 技术社区  · 16 年前

    我有下面的课

    public class MyClass {
       private int myAttr;
    
       public void setAttr(int a) { 
          myAttr = a; 
          Thread.dumpStack();
       }
    }
    

    这样我就可以检测到任何修改的企图 myAttr . 好吧,几乎没有。当有人修改时它不起作用 迈阿特 使用 Field.set() 方法。如何捕获Java的反射使用?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    你不能。你受 SecurityManager 如果有人在你身边,防止其他人对你做坏事。

    相关问题

        2
  •  1
  •   Stephen C    16 年前

    首先,你需要问问自己,你真正担心的是什么。当然-如果有人真的想要,他们可以破坏你的堆栈跟踪。但你为什么真的在乎?如果你真的在乎,为什么你要准备运行他们的代码呢?

    如果您真的需要这样做,您需要创建一个安全沙盒,在其中运行可能会破坏堆栈跟踪程序的代码。具体来说,您需要为其创建一个安全管理器,

        securityManager.checkPermission(ReflectPermission("suppressAccessChecks"))
    

    会扔 SecurityException 对于不受信任的代码。然后使用安全管理器创建一个新的类加载器。

    不幸的是,似乎没有办法限制 setAccessible(...) 特别地 目标 字段、方法或类。