アプレットで
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 署名および検証ツール」を参照してください。