- - PR -
クラスローダの権限設定について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-29 22:22
いつもお世話になっております。
クラスローダの権限設定について 質問があって投稿しました。 現在、URLClassLoaderを拡張したクラスローダを使っています。 そのクラスローダに親と同じ権限を与えたいと思っています。 getPermissions(CodeSource codesource)メソッドを継承して そこでパーミッションを追加すれば 権限は自由に付与することができました。 ただ、与える方法はわかっても、 与えるべきパーミッション(親のパーミッション)の取得ができません。 リフレクションを使えば強引にできると思うのですが、 それ以外の方法で 親から子へ権限を簡単に委譲できる方法はないでしょうか? どなたかご存知の方いらっしゃいましたら教えてください。 以上、よろしくお願いします。 | ||||
|
投稿日時: 2008-09-29 23:45
質問の意味を勘違いして答えているかもしれませんが、
って感じでどうでしょう? 単にgetPermissionsをオーバーライドして、親クラスローダを取得、 親がSecureClassLoaderのサブクラスなら、 その親クラスローダのgetPermissionsを呼び出し、 違うなら、nullを返すだけの実装で要件は満たせるのではと思います。 親のパーミッションを取得するのではなく、 親に権限のチェックを委譲するという考え方です。 | ||||
|
投稿日時: 2008-09-30 10:26
回答ありがとうございます!
>質問の意味を勘違いして答えているかもしれませんが、 とんでもないです。 期待通りの回答です。 ただ、その方法は検討してみたのですが、 SecureClassLoader#getPermissions(codesource)は protectedメソッドなので、 以下の箇所でコンパイルエラーになります…。 return secureLoader.getPermissions(codesource); よろしくお願いします。 | ||||
|
投稿日時: 2008-09-30 12:17
あー、そうですね。。。失礼しました。 (コンパイルせずに書きました。。。反省です。) 権限情報を一定の規格で管理しているわけではないので、 親がどのように権限チェックしているかについては、 クラスローダの実装次第でしょう。 ですので、結局のところ親のメソッドを呼ぶしかないのではないでしょうか。 となると、リフレクションになってしまいます。 期待に添えなくて、すみません。 | ||||
|
投稿日時: 2008-09-30 12:52
かつのりさん
いろいろ調べていただいてありがとうございました。 やはりリフレクションを使うしか手がないのですね。。。 親のクラスローダが参照しているパーミッションファイルがあるので それを解析して、同じパーミッションを与えるようにしました。 ありがとうございました。 |
1