2012-09-11 46 views
0

我有三個類,一個叫做Capture,AppletLogging和AbstractJLabel。我已經在我的%USERPROFILE%/ java.policy文件設置以下權限:AccessControlException與在同一代碼庫中的小程序類

grant codeBase "file:/C:/project/abc/target/test-classes/-" { 
    permission java.util.logging.LoggingPermission "control"; 
}; 

所有的類都在代碼庫從上面的撥款。當Capture在AppletLogging中調用靜態方法時,一切正常。當AbstractJLabel調用AppletLogging相同的靜態方法,然後我得到

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control) 

這將運行在Sun Java插件版本6更新35.沒有人有一個解釋?我得到即使我以下所有的代碼庫批塊相同的錯誤:

permission java.security.AllPermission; 

注意捕獲和AbstractJLabel從靜態塊調用靜態方法。

+0

罐子和數字簽名的代碼,如果小程序需要信任。我不明白爲什麼人們會爲applet制定策略文件。除了您控制的機器外,策略文件不適合部署,如果是這種情況,JWS可能是更好的分發選項。 –

+0

(請注意,不幸的是,靜態初始化程序不會被「Java 2安全模型」專門處理。基於堆棧的安全檢查通過類加載器並返回到導致類初始化的任何代碼中。 –

回答

1

事實證明,我正面臨的問題是因爲每當我得到AccessControlException時,已經運行的線程都是從Javascript中調用的。讓我解釋一下,在applet託管的頁面上,我有一個對applet標籤的引用。可以通過引用applet標籤的Javascript變量在Java applet類上調用公共實例方法。在這種情況下,即使線程正在運行來自小程序的代碼(或包含主小程序類的jar),它也不會繼承來自小程序代碼庫的權限,因爲調用來自外部。解決方法是調用需要AccessController.doPrivileged內部權限的Java代碼。

相關問題