2011-07-19 14 views
0

制限付きサンドボックス内で特定のスレッドクラスを実行したいが、残りのアプリケーションは制限なしで実行できます。スレッドごとにJavaセキュリティマネージャ

特定のスレッドクラスにのみセキュリティマネージャを接続できますか?

-

EDIT:ピーターのヒントを使用して、私は私のカスタムセキュリティマネージャ内で、次の変数を作成しました:

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'の値を取得します。

私は間違っていますか?

+0

「添付」を意味すると思いますか? –

答えて

0

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

+0

ありがとうございます、私は試しましたが、うまくいきませんでした。私は質問を編集しました。 –

+0

OK、別の質問でお尋ねします... –

+1

スレッドごとのSecurityManagerがどのように表示されるかの詳細を含むブログ記事をwirrtenしましたよう:http://alphaloop.blogspot.com/2014/08/a-per-thread-java-security-manager.html – alphaloop

関連する問題