Я использую JConsole для доступа к запущенному MBean.
MBean использует пользовательский модуль регистрации Jaas и запускается со следующей командой:
java -classpath UserLGUGroupHandlingApplication.jar;MBeanSecure.jar
-com.sun.management.jmxremote.login.config=management.properties
-Djava.security.auth.login.config=./sample_jaas.config
com.test.running.RunningImplementation
С файлом management.properties выглядит так:
com.sun.management.jmxremote.access.file=jmxremote.access
com.sun.management.jmxremote=true
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.port=1234
com.sun.management.jmxremote.login.config=Sample
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.ssl.need.client.auth=false
и sample_jaas.config:
Sample {
test.module.AETTLoginModule required debug=true;
};
а затем пользователь получит доступ к этим запущенным процессам, выполнив вход в JConsole из командной строки.
jconsole -debug //or just jconsole
Пользователь выбирает "подключиться удаленно", с RemoteProcess "localhost: 1234"
Модуль login обрабатывает проверку и настройку пользователей на основе пользователя, который в настоящее время входит в систему Windows, который используется для запроса отдельной логики авторизации для определения уровня доступа.
Что я хочу:
- Пользователь вводит jconsole в cmd
- Откроется окно jconsole.
- Пользователь вводит адрес процесса, например. "Локальный: 1234"
- Пользователь не вводит имя пользователя или пароль (поскольку это не требуется, поскольку авторизация обрабатывается пользовательским модулем входа в jaas).
- Модуль определяет, имеет ли пользователь чтение, чтение или отсутствие доступа.
- Открывается окно Jconsole для процесса или сбой входа в систему.
Проблема:
Чтобы получить доступ к процессу jmx в окне jconsole, я должен ввести фиктивное имя пользователя и пароль, например. U: a, P: a, в противном случае я получаю следующую ошибку:
java.lang.SecurityException: Authentication failed! Credentials required
at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticationFailure(JMXPluggableAuthenticator.java:193)
at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticate(JMXPluggableAuthenticator.java:145)
at sun.management.jmxremote.ConnectorBootstrap$AccessFileCheckerAuthenticator.authenticate(ConnectorBootstrap.java:201)
at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213)
at javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:277)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:225)
at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:334)
at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296)
at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280)
Вопрос
Для запуска модуля регистрации Jaas мне нужен следующий набор:
-Dcom.sun.management.jmxremote.authenticate=true
Но это также создает условие в JConsole, где поля поля userername и passowrd должны быть открыты в поле.
Если для этого параметра установлено значение false, модуль регистрации никогда не вызывается.
Можно ли расширить функциональность Jconsole для конкретного экземпляра, применить настройку конфигурации или включить модуль входа в jaas без необходимости устанавливать:
-Dcom.sun.management.jmxremote.authenticate=true
Чтобы избежать необходимости вводить имя пользователя и пароль в следующих полях, выделенных ниже:
Я ищу решение, подобное описанному здесь. Но без необходимости вводить пользовательские поля или поля пароля.
EDIT: Кроме того, чтобы уточнить, это нужно было бы сделать без изменения клиентской стороны JCONSOLE, поэтому, используя только изменения и настройки на стороне сервера.