Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行/启动时禁用System.setOut和setErr?_Java_Logging_Io_Outputstream - Fatal编程技术网

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

Java 如何在运行/启动时禁用System.setOut和setErr?,java,logging,io,outputstream,Java,Logging,Io,Outputstream,如何防止其他类更改System.out?我想在App.main中设置System.out PrintStream并将其设置为最终版本,这样就不能再从应用程序的其他部分更改它。可能吗?任何黑客方法都可以:)我快速查看代码,可以使用SecurityManager防止更改 您可以使用Thread.currentThread().getStackTrace()来标识调用方。您可以使用自定义安全管理器来标识调用方。实现您的安全管理器,如果非自动化的类使用参数“setIO”调用它,它将抛出AccessCon

如何防止其他类更改System.out?我想在App.main中设置System.out PrintStream并将其设置为最终版本,这样就不能再从应用程序的其他部分更改它。可能吗?任何黑客方法都可以:)

我快速查看代码,可以使用SecurityManager防止更改


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

您可以使用自定义安全管理器来标识调用方。实现您的安全管理器,如果非自动化的类使用参数“setIO”调用它,它将抛出AccessControlException,即override
checkPermission()方法。使用
new Throwable().getStackTrace()
识别调用方

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

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