Подключиться к RServe от JAVA, используя аутентификацию

  • Я запускаю RServe с сервера с помощью cmd

    Rserve.exe --RS-conf Rserv.conf --RS-port 12306
    
  • Файл Rserv.conf имеет следующий контент:

    pwdfile RserveAuth.txt
    требуется авторизация
    дистанционное включение
    отключить открытый текст

  • RserveAuth.txt имеет следующее содержание:

    Admin 123456

  • Я подключаюсь к R Server от JAVA

    import org.rosuda.REngine.REXPMismatchException;
    import org.rosuda.REngine.REngineException;
    import org.rosuda.REngine.Rserve.RConnection;
    import org.rosuda.REngine.Rserve.RserveException;
    import org.rosuda.REngine.REXP;
    import org.rosuda.REngine.*;
    public class ConnecttoR
    {
      ...
      ...
     public void connectR()
     {
         try 
        { 
            RConnection connection = new RConnection("172.16.33.242",12306); // Works if authentication is not required in Rserv.conf 
        }
        catch (RserveException e) {
        e.printStackTrace();
        } 
        catch(REXPMismatchException e){
        e.printStackTrace();
        }
        catch(REngineException e){
        e.printStackTrace();            
    } 
     }
    }
    
  • Подключение к Rserve открыто для всех без имени пользователя и пароля. Как добавить безопасность и разрешить соединение только с действительными учетными данными для доступа к Rserve

Ответ 1

Поскольку вы включили аутентификацию после создания соединения в качестве первой команды, вам необходимо выполнить команду login. Для библиотеки Java есть специальная оболочка.

См. Код ниже, например, пример использования.

RConnection connection = new RConnection("127.0.0.1",12306);
connection.login("Admin", "123456");
REXP x = connection.eval("R.version.string");
System.out.println(x.asString());

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