java.beans.Introspector.setBeanInfoSearchPath()
メソッドの実行時にjava.security.AccessControlException
がスローされる
症状Sun JavaTM Runtime Environment (JRETM) 実装を使ってブラウザ内でアプレットを実行すると、次に示すように、
java.beans.Introspector.setBeanInfoSearchPath()
メソッドの実行時にjava.security.AccessControlException
がスローされます。
java.security.AccessControlException:access denied (java.util.PropertyPermission * read,write)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
at java.beans.Introspector.setBeanInfoSearchPath(Unknown Source)
at ....同じアプレットが、Microsoft Virtual Machine (VM) では何のエラーもなく実行されます。
原因
Introspector.setBeanInfoSearchPath()
メソッドの呼び出しでは、BeanInfo
クラスの検索に使用されるパッケージ名の一覧を変更できます。複数のアプレットが VM で実行中の場合、他のアプレットにBeanInfo
の検索をリダイレクトするために、想定外のパッケージで、信頼されていないアプレットがこのメソッドを呼び出す可能性があります。これはセキュリティー上の欠陥です。セキュリティーに関する事柄を扱うため、JRE では
java.util.PropertyPermission
に対するセキュリティーチェックを Introspector.setBeanInfoSearchPath() メソッドに追加します。署名なしのアプレットがこのメソッドを呼び出すと、java.security.AccessControlException
がスローされます。解決方法
上記の原因を修正するには、次の手順に従います。
- Java Development Kit (JDK) の
jarsigner
ツールを使用してアプレットに署名する。これでアプレットは信頼されるアプレットとして実行され、Introspector.setBeanInfoSearchPath()
メソッドを呼び出すためのアクセス権を得るIntrospector.setBeanInfoSearchPath()
を呼び出さないようにアプレットのコードを改変する。たとえばBeanInfo
クラス検索パスに依存する代わりに、完全修飾パッケージ名を使用してBeanInfo
を検索する詳細情報
JAR 署名および検証ツールである「jarsigner」を参照してください。