現在我知道我可以將方法標記爲「無修飾符」,以便它只能通過類&包訪問。Java安全性:如何確保類只能訪問特定的包?
這不是我在這種情況下需要的。我需要的是:
類「Secure.java」上的方法只能從同一個JAR文件中的其他類訪問。
AND(這是多餘的)
當呼叫被製作成安全的方法,調用堆棧不回去到無安全類&然後回。例如:
這是一件好事:
- com.nonsecure.ClassA.doStuff()調用
- com.nonsecure.ClassB.doStuff()調用
- com.secure.Secure.doStuff ()調用
- com.secure.SecureB.doStuff()
這是不好:
- com.nonsecure.ClassA.doStuff()調用
- com.nonsecure.ClassB.doStuff()調用
- com.secure.Secure.doStuff()調用
- 融爲一體。 不安全 .ClassC.doStuff()調用[BAD:我們去了外班在安全JAR!]
- com.secure.SecureB.doStuff()
現在,我想我可以通過一個小體力勞動做到這一點:
private void checkSecurity()
{
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement stackTraceElement : stackTraceElements)
{
// TODO: Add a little magic to check that we've not stepped outside the secure packages.
if (!stackTraceElement.getClassName().startsWith("com.secure"))
{
throw new SecurityException("Woop!");
}
}
}
的問題:這感覺應該有一些Java提供了幫助我在這裏?
我讀過有關
AccessController.doPrivileged(new PrivilegedExceptionAction<String>()
但似乎只是有關訪問資源/網絡連接等 不是關於訪問調用堆棧,以確保某種包裝的保護。
注:
- 我使用Spring 3
- 包含安全代碼的JAR文件使用證書籤名 。
- 在JAR內部對安全類的訪問只能從 開始,JAR外部的直接訪問不允許爲 。
這將會被發現,但可能會有多達700個類需要使用這個SecureMap類型的對象,我真的不想在一個包中包含700個文件(+他們所有的支持類)。 –
@jeffporter你需要添加新的約束到你的問題。 – EJP