在java中提取唯一的调用者信息

时间:2009-12-28 00:30:09

标签: java reflection

我想要做的是通过不仅检查哪个类调用特定方法,还检查该类的哪个实例来实现一些基本安全性。

我试过

  

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();

但显然只给我一个班级名称。允许/要求呼叫者发送自身或个人ID的问题是所有呼叫者都需要访问所有其他呼叫者的详细信息。有人可以帮忙吗?

编辑:更多信息:

所以我们有一个与多个代理连接的服务器。代理发送包含其CLAIM所具有的名称的信息包。有一个特殊的代理人决定人们是否应该在每个特定情况下对此撒谎。

代理与服务器上的Agent类实例建立连接,但某些代理也可能会本机运行。我对这种方法感兴趣的原因是我稍后需要这种技术(提取调用给定方法的特定实例)

我希望这更好,并且抱歉没有提供足够的信息:/

3 个答案:

答案 0 :(得分:4)

这整个攻击线都无法保证任何安全。如果用户可以控制运行的代码,他们可以运行codegen库并编辑代码。如果用户无法控制代码,那么这一切都是不必要的。

如果您无法抗拒这种冲动,一种方法是将所有内容包装在Proxies中,以传达您需要的信息。

通过代理,我的意思是java.lang.reflect.Proxy。也就是说,将这些对象中的每一个包装在代理中。代理人的工作是将this存储在您自己的堆栈中,以便被访问者查询。

这实质上是AOP(面向方面​​编程)的重新发明,所以你可能想要了解它。看看Spring框架。

答案 1 :(得分:1)

你没有得到这样的保障。

我认为对于这些问题,只需检查所有有用的代码都来自签名的jar。

答案 2 :(得分:0)

查找Capability-based security。您应该为每个客户端提供单独的功能对象(实际上是具有不同权限的代理对象),而不是知道哪个客户端正在做什么。