繁体   English   中英

如何在运行时/启动时禁用System.setOut和setErr?

[英]How to disable System.setOut and setErr at runtime/startup?

如何防止其他类更改System.out? 我想在App.main中设置System.out PrintStream并使其成为最终版本,因此无法再从App的其他部分进行更改。 可能吗? 任何hacky方式都会:)

我快速查看代码显示可以使用SecurityManager来防止更改。 ;)

public static void setErr(PrintStream err) {
    checkIO();
    setErr0(err);
}

private static void checkIO() {
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
        sm.checkPermission(new RuntimePermission("setIO"));
    }
}

您可以使用Thread.currentThread()。getStackTrace()来标识调用者。

您可以使用自定义安全管理器来执行此操作。 如果非autorized类使用参数“setIO”调用它,则实现将抛出AccessControlException的安全管理器,即覆盖checkPermission(); 方法。 使用new Throwable().getStackTrace()来识别调用者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM