JMX进程,是否可以在客户端尝试访问时调用外部应用程序来处理访问权限
JMX process, is it possible to call an external application to handle access rights when client attempts access
我有一个 运行ning 在 localhost:1234 上的应用程序,我正在使用 jconsole 连接到它。该应用程序有一个密码文件来处理登录。
我需要允许根据 windows 用户的不同 AD 组登录。因此,例如,如果他们在 Group1 中,他们将获得读写访问权限,如果他们在 Group2 中,他们将获得只读访问权限,而 group3 则不会获得访问权限。
我创建了一个 AD 组处理应用程序,它可以查询 AD 组列表和 return 所需的用户访问级别和登录详细信息。
我的问题:我想通过命令行使用 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 组处理应用程序验证用户详细信息吗?
默认的 RMI 连接器服务器不能很好地做到这一点(you can provide 您自己的 JAAS 模块 (UC3) 或 Authenticator (UC4))。
您最好使用另一个已经委托身份验证的 protocol/implementation。有一些网络服务、REST- 甚至 jboss 远程连接器,其中大部分都可以通过容器机制进行身份验证。不过我觉得大部分都不太好整合。
如果您将 Jolokia (servlet), you could also use hawt.io 用作非常好的 "AJAX" 控制台。 (我不确定 jolokia 是否真的提供了一个 JMX 客户端连接器,您可以在 JConsole 中使用它,但是有许多替代客户端在大多数情况下更适合 integration/automation)。
我有一个 运行ning 在 localhost:1234 上的应用程序,我正在使用 jconsole 连接到它。该应用程序有一个密码文件来处理登录。
我需要允许根据 windows 用户的不同 AD 组登录。因此,例如,如果他们在 Group1 中,他们将获得读写访问权限,如果他们在 Group2 中,他们将获得只读访问权限,而 group3 则不会获得访问权限。
我创建了一个 AD 组处理应用程序,它可以查询 AD 组列表和 return 所需的用户访问级别和登录详细信息。
我的问题:我想通过命令行使用 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 组处理应用程序验证用户详细信息吗?
默认的 RMI 连接器服务器不能很好地做到这一点(you can provide 您自己的 JAAS 模块 (UC3) 或 Authenticator (UC4))。
您最好使用另一个已经委托身份验证的 protocol/implementation。有一些网络服务、REST- 甚至 jboss 远程连接器,其中大部分都可以通过容器机制进行身份验证。不过我觉得大部分都不太好整合。
如果您将 Jolokia (servlet), you could also use hawt.io 用作非常好的 "AJAX" 控制台。 (我不确定 jolokia 是否真的提供了一个 JMX 客户端连接器,您可以在 JConsole 中使用它,但是有许多替代客户端在大多数情况下更适合 integration/automation)。