我有一个没有配置 Spring 的 JMX 服务器,并且正在尝试为授权部分实现 Spring Security。(见这里,https://blogs.oracle.com/lmalventosa/entry/jmx_authentication_authorization 用例 4,没有授权部分)
我现在想使用 Spring Security 实现授权部分。
在我的 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);
在 MBean 中,我尝试获取它并查看它是否已正确传递(将来我计划添加 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 Context 并在 Mbean 中获取它。
但是,例如,当我使用 Jconsole 进行连接时,我没有在 Mbean 中获得 Spring Context。
我正在使用可继承线程策略。
- 当使用 JConsole 和其他连接器进行连接时,是否有办法在 MBean 中获取上下文?
- 如果我使用 Spring 实现 JMX,它会帮助我解决问题吗?
- 我的主要流程是万无一失的吗(有没有机会我不会在 MBean 中获得上下文)?我问这个,因为这个流程对我来说很重要,所以要做到万无一失。
非常感谢!