2011-01-24 16 views
1

私はしばらくJMXを勉強していますが、私は立ち往生しています。JMXクライアントセッション

私はJMX経由でリモートクライアントにいくつかの機能を公開するアプリケーションを持っていますが、私のアプリケーションはセキュリティバックエンドとしてApache Shiroフレームワークを使用することがほとんどです。

私の問題は、私がクライアントデータサーバサイドをどのように収集するのかではないということです。 Shiroはクライアント(サブジェクト)を識別する方法が必要ですが、通常はスレッドを実行するのはサブジェクトに関連付けられていますが、オンラインのJMXドキュメントではリモートJMXのスレッドモデルについてはあまり手掛かりがありません。

クライアントとスレッドを関連付けるにはどうすればよいですか、または相互作用するMBean内でクライアントデータを取得する方法はありますか?

答えて

0

異なる技術を研究して試した後、

1- Java 7の一部となるClientContextと呼ばれる新しい機能:Java 7はまだ完成しておらず、ClientContextは後方互換性を失うでしょう。

2 ShiroをAccessControlContextの対象にする:これは私が選んだ解決策ですが、Shiroのデフォルトのサブジェクト取得メカニズムはJavaのアクセス制御コンテキストを考慮しません。私はこれをテストするためにずっと前にテストを行ったが、うまくいかなかった。これで、なぜSecurityUtils.getSubject()呼び出しによって、取得されたSubjectが現在呼び出しているスレッドに接続されますが、クライアント間でスレッドを共有できるため、このアプローチは役に立たないことになります。しかし、AccessControlContextははるかに強力で、JMXがうまくいくように見えます。アクセス制御コンテキスト(JMXAuthenticatorでのログイン中に認証される)には、MBeanServerForwarderまたはMBean内部からアクセスすることができます。私は、複数のクライアントがプリンシパルを検索してこれをテストしました。単に動作します。

編集:どのようにShiroを現在のAccessControlContextに付けるのですか?

1-ビルダークラスSubject.Builderを使用して、添付されていないShiroサブジェクトを作成します。

2-プライベート証明書としてシロ対象を含むシングルトンセットと可変JAASサブジェクトを作成し(等シロ対象のログイン方法を使用して)

3-ユーザーを認証します。

、4-基盤となるJavaセキュリティシステムにJAASサブジェクトを提供する(例えば、JMXAuthenticatorの認証方法の中に被写体を返します)

ヘルパークラスは、このアプローチを簡素化するために作成することができます。 Shiroの主体のために(認可などのために)実行されるアクションが必要なときは、AccessControlContextから取得し、Subject.execute ...メソッドの1つを使用します。これは、プロキシまたはフォワーダ(MBeanServerForwarderなど)の内部で実行できます。

+0

@Farrukh Najmiどのようにすればよいか詳細な説明が追加されました –

関連する問題