2009-12-28 35 views
0

我想要做的是通過不僅檢查哪個類調用特定的方法,而且還檢查該類的哪個實例來實現一些基本的安全性。在java中提取唯一的調用者信息

我試圖

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

但這顯然只是給我的類名。允許/要求呼叫者發送自己或個人ID的問題是所有呼叫者都必須能夠訪問所有其他人的詳細信息。誰能幫忙?

編輯:更多的信息:

因此,我們有一臺服務器,這使得與多家代理的連接。代理髮送包含其CLAIM名稱的信息包。有一個特別的代理人決定人們是否應該在每個特定的情況下說謊。

代理程序連接到服務器上的代理程序類的實例,但也有可能某些代理程序會以本機方式運行。我感興趣的是這種做法的原因是,我稍後將需要該技術(提取稱爲給定方法的具體實例)

我希望這是好了,對不起,以前沒有把足夠的信息:/

+0

正如bmargulies所說,你將無法通過這種方式獲得安全。如果你告訴我們更多關於你在做什麼以及你爲什麼要這樣做,或許我們可以幫助你想出另一種方法。 – jdigital 2009-12-28 01:45:27

回答

4

這整個攻擊行動無法保證任何安全。如果用戶可以控制運行的代碼,他們可以運行代碼庫並編輯代碼。如果用戶無法控制代碼,那麼這是不必要的。

如果你無法抵抗這種衝動,一種方法是將所有信息都包含在代理中,以傳達你所需要的信息。

代理,我的意思是java.lang.reflect.Proxy。也就是說,將這些對象中的每一個包裝在代理中。代理人的工作是將this存儲在你自己的堆棧上,被叫方可以參考。

這基本上是AOP(面向方面​​的編程)重新發明,所以你可能想讀一下。看看Spring框架。

+0

好吧,我想我沒有提供足夠的信息。整個結構在服務器上,代理已經是代理。問題是代理髮送一個包含一些數據的數據包。服務器只需要添加一個標籤來說明它來自哪個代理。 – 2009-12-28 01:46:37

1

你沒有保護這樣的東西。

我認爲這樣的問題只是檢查所有的貢獻代碼來自簽名的罐子。

+0

我只想驗證身份。只要我們知道同一個人講述了哪些謊言,人們就可以撒謊。 – 2009-12-28 06:02:31

0

查找Capability-based security。您不應該知道哪個客戶端在做什麼,而應該爲每個客戶端分配不同的功能對象(實質上是具有不同權限的代理對象)。