1

我有一个在 localhost:1234 上运行的应用程序,我正在使用 jconsole 连接到它。该应用程序有一个密码文件来处理登录。

我需要允许基于windows用户的不同AD组登录。因此,例如,如果他们在 Group1 中,他们将被授予读写访问权限,如果他们是 Group2,他们将获得只读访问权限,而 group3 则不被授予访问权限。

我创建了一个 AD 组处理应用程序,它可以查询 AD 组列表并返回所需的用户访问级别和登录详细信息。

我的问题:我想通过命令行使用 jconsole 连接到应用程序,例如:

jconsole localhost:1234

显然这将无法连接,因为它需要用户名和密码。

有没有一种方法可以让我在 localhost:1234 上运行的 JMX 应用程序等待传入的连接请求并运行我的 AD 组处理应用程序以确定它们的访问级别?

我在 localhost:1234 上的应用程序非常基本,如下所示:

import java.lang.management.ManagementFactory;

import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;

    public class SystemConfigManagement {

        private static final int DEFAULT_NO_THREADS = 10;
        private static final String DEFAULT_SCHEMA = "default";

        public static void main(String[] args) 
                throws MalformedObjectNameException, InterruptedException, 
                InstanceAlreadyExistsException, MBeanRegistrationException, 
                NotCompliantMBeanException{
            //Get the MBean server
            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
            //register the mBean
            SystemConfig mBean = new SystemConfig(DEFAULT_NO_THREADS, DEFAULT_SCHEMA);
            ObjectName name = new ObjectName("com.barc.jmx:type=SystemConfig");
            mbs.registerMBean(mBean,  name);
            do{
                Thread.sleep(2000);
                System.out.println(
                        "Thread Count = " + mBean.getThreadCount() 
                        + ":::Schema Name = " + mBean.getSchemaName()
                        );
            }while(mBean.getThreadCount() != 0);
        }
    }

package com.test.jmx;

public class SystemConfig implements SystemConfigMBean {

    private int threadCount;
    private String schemaName;

    public SystemConfig(int numThreads, String schema){
        this.threadCount = numThreads;
        this.schemaName = schema;
    }

    @Override
    public void setThreadCount(int noOfThreads) {
        this.threadCount = noOfThreads;
    }

    @Override
    public int getThreadCount() {
        return this.threadCount;
    }

    @Override
    public void setSchemaName(String schemaName) {
        this.schemaName = schemaName;
    }

    @Override
    public String getSchemaName() {
        return this.schemaName;
    }

    @Override
    public String doConfig() {
        return "No of Threads=" + this.threadCount + " and DB Schema Name = " + this.schemaName;
    }

}

[来源:http://www.journaldev.com/1352/what-is-jmx-mbean-jconsole-tutorial]

main() 中是否有可以创建此查询以使用 AD 组处理应用程序验证用户详细信息的地方?

4

1 回答 1

1

默认的 RMI 连接器服务器不能很好地做到这一点(您可以提供自己的 JAAS 模块 (UC3) 或 Authenticator (UC4))。

您最好使用已经委托身份验证的另一个协议/实现。有一些 web 服务、REST 甚至 jboss 远程连接器,它们中的大多数都可以通过容器机制进行身份验证。但是我认为它们中的大多数都不容易集成。

如果您使用例如Jolokia (servlet),您也可以使用hawt.io作为一个非常好的“AJAX”控制台。(我不确定 jolokia 是否真的提供了一个 JMX 客户端连接器,您可以在 JConsole 中使用它,但有许多替代客户端大多数时候更适合集成/自动化)。

于 2015-04-22T10:47:49.527 回答