【问题标题】:spring security jmx authneticatorspring security jmx 身份验证器
【发布时间】:2013-01-15 07:54:20
【问题描述】:

我有一个没有配置 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 上下文。

我正在使用 Inheritable Thread 策略。

  1. 在使用 JConsole 和其他连接器进行连接时,是否有办法在 MBean 中获取上下文?
  2. 如果我使用 Spring 实现 JMX,它会帮助我解决问题吗?
  3. 我的主要流程是万无一失的吗(是否有可能我不会在 MBean 中获取上下文)?我问这个,因为这个流程对我来说很重要,所以要做到万无一失。

非常感谢!

【问题讨论】:

    标签: authentication spring-security jmx thread-local security-context


    【解决方案1】:

    我将回答我自己的问题,因为我对此感兴趣并想分享我自己的结论(与上述数字无关):

    1. 看起来与本地的 JConsole(或 JVisualVM)连接(即本地主机)直接连接到线程,而不通过 JMX Authenticator。 我发现的唯一解决方法是连接完整的 URL(例如 service:jmx:rmi:///jndi/rmi://10.45.32.112:3251/jmxrmi)。

    2. 始终有效的一种机制是 Java 安全上下文;当 JMXAuthenticator 返回一个 Subject 时,您可以将 Spring Security Context 分配给它,因此在调用方法时肯定会得到它(例如,在调用之前运行的 Advice 中)。 看到我得到的这个回复: http://forum.springsource.org/showthread.php?134327-JMX-Authentication-with-Spring-Security-%283-1-x%29

    3. 我不能确定问题中提到的流程是否是万无一失的。 但它似乎是,基于这个假设: 如果您为每个 JMX 调用创建一个新连接并将其仅用于一次调用,您将获得 Spring Security Context 以正确传播。

    希望它对您有所帮助:-)

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2014-02-26
      • 1970-01-01
      • 2019-08-25
      • 2013-10-30
      • 2014-04-07
      • 2012-02-18
      • 2019-04-08
      • 2016-09-01
      相关资源
      最近更新 更多