アプレットで
java.beans.Introspector.setBeanInfoSearchPath()
を呼び出すとjava.security.AccessControlException
がスローされる
症状アプレットを Sun JRE を使用したブラウザで実行している場合、
AccessControlException
がIntrospector.setBeanInfoSearchPath()
の実行中にスローされます。
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 VM では実行できます。
原因
Introspector.setBeanInfoSearchPath()
メソッドの呼び出しでは、BeanInfo
クラスの検索に使用されるパッケージ名の一覧を変更できます。複数のアプレットが VM で実行中の場合、他のアプレットにBeanInfo
の検索をリダイレクトするために、想定外のパッケージで、信頼されていないアプレットがこのメソッドを呼び出す可能性があります。これがセキュリティホールです。セキュリティに関する事柄を扱うため、JRE では
java.util.PropertyPermission
に対するセキュリティチェックをこのメソッドに追加しました。アプレットが署名されておらず、このメソッドに呼び出された場合、AccessControlException
がスローされます。解決方法
回避策は次のいずれかです。
- JDK の
jarsigner
ツールを使用してアプレットに署名する。これでアプレットは信頼されるアプレットとして実行され、Introspector.setBeanInfoSearchPath()
メソッドを呼び出すためのアクセス権を得るIntrospector.setBeanInfoSearchPath()
を呼び出さないようにアプレットのコードを改変する。たとえばBeanInfo
検索パスに依存する代わりに、完全修飾パッケージ名を使用してBeanInfo
を検索する詳細情報
「jarsigner - JAR 署名および検証ツール」を参照してください。