我试图阻止玩家的某些操作,但不是我的游戏基础设施,为此我正在使用安全管理器。看起来像这样
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()
如上所示)。访问控制 javadoc 讨论的唯一内容是特殊代码块中的特权操作,但它没有显示如何使用控制器来实际阻止操作