Подключиться к 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
.