Java 如何在运行/启动时禁用System.setOut和setErr?
如何防止其他类更改System.out?我想在App.main中设置System.out PrintStream并将其设置为最终版本,这样就不能再从应用程序的其他部分更改它。可能吗?任何黑客方法都可以:)我快速查看代码,可以使用SecurityManager防止更改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
您可以使用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"));
}
}