2011-09-12 14 views
3

他のクラスがSystem.outを変更しないようにするには?私は、App.mainでSystem.out PrintStreamを設定して、それを最終段階にして、アプリケーションの他の部分からもうフォームを変更することはできません。出来ますか?任意のハッキーな方法があります:)実行時/起動時にSystem.setOutとsetErrを無効にするには?

答えて

4

私はコードを見て、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()を使用すると、呼び出し元を識別できます。

+0

ありがとう、良いリード! – Ivarpoiss

0

カスタムセキュリティマネージャを使用して行うことができます。自動化されていないクラスがパラメータ "setIO"で呼び出す場合、つまりcheckPermission();メソッドをオーバーライドする場合、AccessControlExceptionをスローするセキュリティマネージャを実装します。発信者を識別するにはnew Throwable().getStackTrace()を使用してください。

関連する問題