当前位置: 首页 > 知识库问答 >
问题:

JMX 进程,当客户端尝试访问时是否可以调用外部应用程序来处理访问权限

舒浩邈
2023-03-14

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

我需要允许根据Windows用户的不同AD组登录。例如,如果他们在组 1 中,他们将获得读写访问权限,如果他们是组 2,则授予他们只读访问权限,而组 3 不被授予和访问权限。

我已经创建了一个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组处理应用程序创建此查询以验证用户详细信息的地方?

共有1个答案

韩朝斑
2023-03-14

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

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

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

 类似资料:
  • 我需要远程调试我的应用程序,但由于以下错误,我无法这样做: 我有: null 下面是iptables的输出: 如何用8000端口修复此问题?或者也许我的主要问题还有其他原因?

  • 问题内容: 对于某些集成项目,我想从非Java客户端查询JMX代理。 到目前为止,我发现了两个选项,ws-jmx- connector(基于Soap)和mx4j及其返回XML文档响应的JMX HTTP适配器 。基于JSR 262的ws-jmx- connector似乎不再处于积极开发中。我没有尝试过MX4J,所以我不知道是否可以在J2SE中将HTTP适配器与标准JMX实现一起使用。 是否还有其他软

  • 问题内容: 随着iOS 7的引入,应用程序在想要录制音频时必须请求访问麦克风。 如何检查应用程序是否可以访问麦克风? 在iOS 8 SDK中,我可以使用枚举,但是如何在iOS 7中进行检查? 信息: 我不想请求权限,我只想检查应用程序是否可以访问麦克风。(例如位置访问权限): 问题答案: 在这种情况下,无法获取..的当前状态。他们已将枚举指定为AVAudioSessionRecordPermiss

  • 在一些安装上(SLES), FreeRADIUS客户端程序不能读取字典文件. 这只有当你用一个普通用户运行时才会发生. 访问dictionary文件是需要的对于客户端来解析许多RADIUS AVPs到数字. 当这个问题存在时, 你将会的到下面的信息: radclient: dict_init: Couldn't open dictionary "/etc/raddb/dictionary": Pe

  • 当我在我的设备(Galaxy Note 3和Ouya)上调试一个在Android Studio中编写的应用程序时,该应用程序调试良好,并在设备上运行,但是该应用程序从未出现在应用程序抽屉中,所以我无法在断开连接的设备上运行它(即当我的开发计算机离开时,向其他人显示正在运行的应用程序)。我的应用程序曾经安装为可运行的应用程序,但这似乎不再发生。然而,应用程序在应用程序管理器中被列为一个应用程序,我可

  • 我正试图连接到google Contacts api以访问保存在google中的联系人/联系人,但它抛出了一个TokenResponseException:401 Unauthorized。我对谷歌Oauth2有些陌生。0.我已按要求将服务帐户密钥文件下载到我的项目根目录。 代码如下: 但是,会引发以下异常: 通用域名格式。谷歌。应用程序编程接口。客户啊。oauth2。TokenResponseE