Spring なしで構成された JMX サーバーがあり、承認部分に Spring Security を実装しようとしています。(こちら、https://blogs.oracle.com/lmalventosa/entry/jmx_authentication_authorization ユース ケース 4 を参照してください。承認部分は含まれていません)
Spring Security を使用して Authorization 部分を実装したいと思います。
私の JMX オーセンティケーターでは、次のことを行います。
final List<GrantedAuthority> roles = new ArrayList<GrantedAuthority>();
roles.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
final Authentication auth = new UsernamePasswordAuthenticationToken(credentialsArr[0], credentialsArr[1],
roles);
SecurityContextHolder.getContext().setAuthentication(auth);
そして、MBeans でそれを取得しようとし、それが正しく渡されたことを確認します (将来的には、Spring Annotations を追加してロールやメソッド呼び出しをチェックする予定です)。
final Authentication springAuth = SecurityContextHolder.getContext().getAuthentication();
問題は、標準の接続フローでは次のことです。
JMXServiceURL url = ...;
Map env = ...;
String[] creds = {"monitorRole", "mrpasswd", "FileRealm"};
env.put(JMXConnector.CREDENTIALS, creds);
JMXConnector cc = JMXConnectorFactory.connect(url, env);
MBeanServerConnection mbsc = cc.getMBeanServerConnection();
JMX コネクタを取得し、MBean サーバーに接続してメソッドを呼び出します。動作します。オーセンティケーターを通過し、Spring コンテキストを設定して、Mbean で取得します。
しかし、たとえば、Jconsole を使用して接続すると、Mbean で Spring コンテキストを取得できません。
継承可能なスレッド戦略を使用しています。
- JConsole やその他のコネクタを使用して接続するときに、MBean でもコンテキストを取得する方法はありますか?
- Spring を使用して JMX を実装すると、問題の解決に役立ちますか?
- 私のメイン フローは絶対確実ですか (MBean でコンテキストを取得できない可能性はありますか)? このフローは私にとって非常に重要なので、誰にでもわかるようにお願いしています。
どうもありがとう!