1

制限されたサンドボックスで特定のスレッドクラスを実行したいのですが、アプリケーションの残りの部分は制限なしで実行できます。

特定のスレッドクラスに対してのみセキュリティマネージャをアタッチすることは可能ですか?

-

編集:Peterのヒントを使用して、カスタムセキュリティマネージャー内に次の変数を作成しました。

private static ThreadLocal<Boolean> isChatbot = new InheritableThreadLocal<Boolean>() {
  @Override protected synchronized Boolean initialValue() {
    boolean value = (Thread.currentThread() instanceof ChatBot);
    return value;
  }
  @Override protected synchronized Boolean childValue(Boolean parentValue) {
    boolean value = (Thread.currentThread() instanceof ChatBot || parentValue);
    return value;
  }
};

チャットボットは、制限付きで実行したい特定のクラスのスレッドです。したがって、initialValueではすべてのChatBotスレッドに値'true'を指定し、childValueではChatBotスレッドによって生成されたすべての子に値'true'を指定します。

不思議なことに、これは機能しません。childValue内にブレークポイントを設定しましたが、実行がそこに到達しないことがわかったため、子スレッドは「false」の値を取得します。

私は何が間違っているのですか?

4

1 に答える 1

1

1つのスレッド(またはInheritableThreadLocalを持つすべてのスレッド)のみをチェックするセキュリティマネージャーを作成できます。InheritableThreadLocalを使用する利点は、生成されたスレッドもチェックされることです。

于 2011-07-19T09:26:21.530 に答える