Ограничение JMX к localhost

Сначала, в пользовательском интерфейсе, измените value для параметра sliderInput, «EU_slider_DF» на value=1

, затем измените свой сервер, чтобы следовать этому

#Add session argument so we can push updates
server<-function(input,output,session){

#Output to our text output, render is reactive so directly use input

Сначала, в пользовательском интерфейсе, измените value для параметра sliderInput, «EU_slider_DF» на value=1

, затем измените свой сервер, чтобы следовать этому

[110] output$dropinput<-renderPrint({input$szenarios}) #Observe event used to monitor changes anytime the selectinput is changed observeEvent(input$szenarios,{ if (input$szenarios=="shiny"){ (dropinput<- 2) }else if (input$szenarios=="calculated") { (dropinput<- 3) }else{ (dropinput<-1) } #updates slider based on what is selected updateSliderInput(session,"EU_slider_DF",value=dropinput, min = 0, max = 3,step=0.001) }) }
5
задан 7 December 2008 в 00:52
поделиться

4 ответа

Немного поздно ответьте, но если это - все еще проблема для Вас (или кто-то еще), я думаю, что это добьется цели:

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.RMISocketFactory;

import javax.management.MBeanServer;
import javax.management.remote.*;

public class LocalJMXPort {
    public static void main(String[] args) {
        try {
            int port = 12468;
            // Create an instance of our own socket factory (see below)
            RMISocketFactory factory = new LocalHostSocketFactory();

            // Set it as default
            RMISocketFactory.setSocketFactory(factory);

            // Create our registry
            LocateRegistry.createRegistry(port);

          // Get the MBeanServer and setup a JMXConnectorServer
            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
            JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://127.0.0.1:"+port+"/jndi/rmi://127.0.0.1:"+port+"/jmxrmi");
            JMXConnectorServer rmiServer = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
            rmiServer.start();

            // Say something
            System.out.println("Connect your jconsole to localhost:"+port+". Press a key to exit");

            // Wait for a key press
            int in = System.in.read();
            //Exit
            System.out.println("Exiting");
            System.exit(0);
        } catch(Exception ex) {
            ex.printStackTrace();
        }
    }

    static private class LocalHostSocketFactory extends RMISocketFactory {
        public ServerSocket createServerSocket(int port) throws IOException {
            ServerSocket ret = new ServerSocket();
            ret.bind(new InetSocketAddress("localhost", port));
            return ret;
        }

        public Socket createSocket(String host, int port) throws IOException {
            return new Socket(host, port);
        }
    }
}

Я просто соединил его, и возможно, что я сделал что-то действительно глупое, потому что моя единственная цель состояла в том, чтобы иметь его связывающий с localhost:port вместо *:port и что часть, кажется, работает.

Не стесняйтесь комментировать, существуют ли вещи, которые могли бы быть улучшены или просто глупы.

2
ответ дан 14 December 2019 в 09:03
поделиться

К сожалению, в настоящее время нет никакого способа сделать это.

Согласно документации Sun единственный-Dcom.sun.management.jmxremote должен открыть только локальный порт, в то время как-Dcom.sun.management.jmxremote.port = открывает удаленно доступный порт.

Оба пути открывают дополнительный случайный порт, который доступен от удаленного.

Я видел-Dcom.sun.management.jmxremote.host =, но это, кажется, не имеет эффекта.

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

1
ответ дан 14 December 2019 в 09:03
поделиться

Не может помочь с солнцем способу сделать его. Даже после jmx адаптеры начал идти с jdk (6, я думаю?) Я продолжал использовать mx4j для установки адаптера наименьшего-количества-усилия. Это тривиально для запуска адаптера mx4j http на 127.0.0.1 или внутренний единственный интерфейс. Затем SOP был к ssh в с портом вперед или сценариями использования с командами wget.

http://mx4j.sourceforge.net/

1
ответ дан 14 December 2019 в 09:03
поделиться

Если вы получаете доступ с локального хоста, то в этом случае можно сделать то, что делают JConsole и JVisualVM, а именно использовать Attach API для поиска локального адреса сервера (что вы получите, если запустите с -Dcom.sun.management.jmxremote, а не с -Dcom.sun.management.jmxremote.port=N) и подключитесь к нему. В другом ответе Thraidh говорит, что даже в этом случае открыт порт с удаленным доступом, что было верно в более ранних версиях, но не было верно в течение пары лет.

Решение Фредрика работает, но переборщит. Вам нужно только определить RMIServerSocketFactory, а не RMISocketFactory (которая определяет и клиента, и сервер). Это устраняет необходимость в специальной настройке клиента. Код по адресу http://vafer.org/blog/20061010091658 мне кажется корректным.

Управление "из коробки", построенное со свойствами командной строки типа -Dcom.sun.management.jmxremote, может занять вас только до того, как вам понадобится начать программирование с помощью самого JMX API. Обычно мы не хотели, чтобы "нестандартное" управление превратилось в полноценное параллельное API, поэтому есть проблемы, подобные этой, которые недоступны. Мы объясняем, как перейти от одного к другому здесь.

Эймон Макманус, JMX Spec Lead

.
3
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: