ゲーム インフラストラクチャからではなく、プレイヤーからの特定のアクションをブロックしようとしています。そのために、セキュリティ マネージャーを使用しています。このように見えます
public class GameSecurityManager extends SecurityManager {
@Override
public void checkPackageAccess(String pkg) {
super.checkPackageAccess(pkg);
if (isPlayer()) {
if (pkg.startsWith("ca.hilikus.jrobocom")) {
if (!"ca.hilikus.jrobocom.player".equals(pkg) && !"ca.hilikus.jrobocom.robot.api".equals(pkg)) {
throw new SecurityException("No access to game packages");
}}}
}
}
セキュリティ マネージャに関するドキュメントは非常に少なく、そのほとんどは 90 年代のものです。AccessController の状況はさらに悪化しています。ただし、セクション6.2に記載されているこれを見つけました
アプリケーション コードで AccessController を使用することをお勧めしますが、セキュリティ マネージャーのカスタマイズ (サブクラス化による) は最後の手段であり、細心の注意を払って行う必要があります。
あなたはその声明に同意しますか?誰かがその理由を説明できますか? その場合、貼り付けたサンプル コードと同様のことをどのように達成できますか? リフレクション、スレッド化、コンテキストに基づいたオブジェクトのインスタンス化などをブロックしようとしています(isPlayer()
上記のように)。Access Control の javadoc で説明されているのは、特別なコード ブロック内の特権操作だけですが、コントローラーを使用して実際にアクションをブロックする方法は示されていません。