Я использую JConsole для доступа к запущенному MBean.Обход требования JConsole для имени пользователя/пароля - при использовании пользовательского модуля входа Jaas с JMX для обработки авторизации и аутентификации
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;
};
, а затем пользователь получит доступ к этим работающим процессам путем входа в систему h JConsole из командной строки.
jconsole -debug //or just jconsole
Пользователь выбирает «удаленное подключение», с RemoteProcess «LOCALHOST: 1234»
LoginModule обрабатывает проверки пользователя и настройки принципалов на основе пользователя в данный момент вошедшего в Windows, который используется для запросить отдельную логику авторизации для определения уровня доступа.
То, что я хочу, чтобы это произошло: enteres
- пользователя Jconsole в ЦМД
- открывается JConsole окно.
- Пользователь вводит адрес процесса, например. "localhost: 1234"
- Пользователь не введите имя пользователя или пароль (так как это не требуется, так как авторизация обрабатывается пользовательским модулем входа в jaas).
- Модуль определяет, имеет ли пользователь режим readwrite, readonly или no access.
- Открывается окно консоли для процесса или сбой входа в систему.
выпуск:
Чтобы получить доступ к процессу JMX в Jconsole окна I должен ввести фиктивное имя пользователя и пароль, например U: а, Р: а, в противном случае я получаю следующее сообщение об ошибке:
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, где поля имени пользователя и passowrd должны быть открыты в поле.
Если для этого параметра установлено значение false, модуль регистрации никогда не вызывается.
Можно либо расширить функциональные возможности Jconsole для конкретного экземпляра, применить параметр конфигурации, или включить модуль JAAS входа без необходимости устанавливать:
-Dcom.sun.management.jmxremote.authenticate=true
Для того, чтобы предотвратить необходимость ввода имя пользователя и пароль в следующих областях выделены ниже:
Я ищу решение, аналогичное тому, продемонстрировал here. Но без необходимости ввода пользователем полей имени пользователя или пароля.
EDIT: Кроме того, чтобы уточнить, это необходимо сделать без изменения клиентской стороны JCONSOLE, поэтому, используя только изменения и настройки на стороне сервера.
Спасибо, однако, на мой вопрос конкретно на модификации Jconsole необходимость для пользователя ввод требований. В тематическом исследовании основное внимание уделяется JaasLoginModule и коду на стороне клиента. – Loco234
Пожалуйста, свяжитесь только с ответами, так как ссылки могут сломаться. – NathanOliver
Re: редактирование. Мне любопытно, существует ли более прямой подход к этому, поскольку использование модуля входа в систему Jaas является довольно распространенным требованием. Казалось бы странным ограничивать ввод учетных данных пользователя и пароля, используя поля в Jconsole. Я сразу же подумал, что нужно указать файл конфигурации jaas, установив com.sun.management.jmxremote.authenticate = false. Генерация контекста обрабатывается отдельным сценарием, который вызывается в модуле входа, эффективно минуя необходимость проверки учетных данных пользователей, поскольку они будут основаны на текущем зарегистрированном пользователе. – Loco234