为JMX JConsole设置用户名密码登录

时间:2024-10-21 12:33:10
个人环境说明:
JAVA jdk1.6.0_20
IP地址:192.168.88.106
系统登陆用户名:Administrator


1,设置密码文件和权限
在jdk1.6.0_20\jre\lib\management中将复制一份重命为
。修改最后两行,将
#monitorRole  QED
#controlRole   R&D
前面的#号去掉。为什么后面解释。


然后修改的文件权限为仅当前用户完全控制,所有者为当前用户,具体步骤如下:
Windows系统需要3个步骤:


在文件上右键->属性,切换到安全选项卡。<XP系统可能看不到,请百度>
点“高级”按钮,弹出“的高级安全设置”窗口。
(1)删除所有用户对文件的访问权限:
在“权限”选项卡中点“更改权限”,将“包括可从该对象的父项继承的权限”
复选框去掉,然后系统会弹出一个“Windows安全”警告,选择“删除”按钮。
删除成功后,权限项目栏会变成:“所有组或用户均不具有访问此对象的权限。但是该对象的所有者可以分配权限。”


(2)指定当前登陆用户对该文件有完全控制权限
点“添加”按钮,再点“高级”按钮,再点“立即查找”,在搜索结果中找当前系统的登陆用户双击添加进来。
注意不要选择那些带S结尾的,那个表示组,只能选择用户。我的是Administrator
返回后点确定,然后在弹出框中勾选“完全控制”。点确定返回刚开始的“的高级安全设置”窗口。
(3)将所有者设置为当前系统的登陆用户
切换到所有者选项卡,点击“编辑”,双击选择当前系统的登陆用户,注意不要选择那些带S结尾的,那个表示组,只能选择用户。
最后一路确定。权限修改完毕。


Linux系统:
chmod 600 这个没试过,官方这么写的。


2,启动JMX服务端


下面这行命令我是在JDK的根目录执行的,
这里指定的端口号是10089,主机名称即当前计算机IP地址,不推荐设置成localhsot或者127.0.0.1,会导致在别的机子上连不上来。JAR包指定的是JDK自带的一个DEMO
java -=false -=10089 -=192.168.88.106 -jar demo/jfc/Java2D/ 


3,启动JConsole
在JDK的bin目录执行
选择远程进程,输入地址:
service:jmx:rmi:///jndi/rmi://192.168.88.106:10089/jmxrmi
也可以是 192.168.88.106:10089


用户名:controlRole  密码R&D
下面这个也可以,
用户名:monitorRole  密码QED
其实用的就是文件里面写的用户名和密码,也可以添加几个用户的,
新添加的用户要到jdk1.6.0_20\jre\lib\management\文件里面设置对应的权限。这个简单,
Ctrl+C Ctrl+V就搞定。


4,Windows权限设置最麻烦,JConsole只会提示连接失败,看不见详细原因。

附上JAVA调试连接用的代码,这个可以看失败原因:

public static void main(String[] args) {
		String hostName = "192.168.88.106";
		int portNum = 10089;
		
		try {
			JMXServiceURL u = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" 
					+ hostName + ":" + portNum + "/jmxrmi");

			Map<String, Object> auth = new HashMap<String, Object>();
			(, new String[] { "controlRole", "R&D" });

			JMXConnector c = (u, auth);
		} catch (MalformedURLException e) {
			();
		} catch (IOException e) {
			();
		}

	}