Процесс JMX, можно ли вызвать внешнее приложение для обработки прав доступа, когда клиент пытается получить доступ

У меня есть приложение, работающее на локальном хосте: 1234, я использую jconsole для подключения к нему. Приложение имеет файл паролей для входа в систему.

Мне нужно разрешить вход в систему на основе разных групп AD пользователя Windows. Так, например, если они в группе 1, им будет предоставлен доступ для чтения и записи, если они в группе 2, им будет предоставлен доступ только для чтения, а группе 3 не будет предоставлен доступ.

Я создал приложение для обработки групп AD, которое может запрашивать список групп AD и возвращать требуемый уровень доступа пользователя и данные для входа.

Моя проблема: я хочу подключиться к приложению с помощью jconsole через командную строку, используя что-то вроде:

jconsole localhost:1234

Очевидно, что это не сможет подключиться, потому что он ожидает имя пользователя и пароль.

Есть ли способ, которым я могу заставить свое приложение JMX, работающее на localhost: 1234, ждать входящего запроса на подключение и запускать приложение для обработки группы 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?


person Loco234    schedule 22.04.2015    source источник


Ответы (1)


Сервер соединителя RMI по умолчанию не может сделать это очень хорошо (вы можете предоставить свой собственный модуль JAAS ( UC3) или Аутентификатор (UC4)).

Возможно, вам лучше использовать другой протокол/реализацию, который уже делегирует аутентификацию. Есть несколько веб-сервисов, REST-коннекторов и даже коннекторов удаленного взаимодействия jboss, и большинство из них можно аутентифицировать с помощью механизма контейнера. Однако я думаю, что большинство из них нелегко интегрировать.

Если вы используете, например, Jolokia (сервлет), вы также можете использовать hawt.io в качестве очень хорошей консоли "AJAX". (Я не уверен, действительно ли jolokia поставляет коннектор клиента JMX, который вы можете использовать в JConsole, но есть много альтернативных клиентов, которые в большинстве случаев лучше подходят для интеграции/автоматизации).

person eckes    schedule 22.04.2015