2017-11-15 8 views
13
  • Ich betreibe rserve von Server-Rechner cmdConnect rserve von JAVA-Authentifizierung mit

    Rserve.exe --RS-conf Rserv.conf --RS-port 12306 
    
  • Rserv.conf Datei folgenden Inhalt hat:

    pwdfile RserveAuth.txt
    Auth erforderlich
    remote enable
    Klartext deaktivieren

  • RserveAuth.txt hat folgenden Inhalt:

    Admin 123456

  • I R Server von JAVA anschließe ist

    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();    
    } 
    } 
    } 
    
  • Anschluss an rserve offen für alle ohne Benutzernamen & Passwort. Wie soll ich die Sicherheit hinzufügen, und lassen Sie die Verbindung nur mit gültigen Anmeldeinformationen rserve

+0

Es sieht so aus, als ob Ihr RServer unter Windows 'Rserve.exe' installiert ist, was macht der Client-Benutzer [Windows, MacOSX, Linux]? Ist Ihr Produktions-RServer unter Windows? Einfach die Anforderungen überprüfen. – Technophobe01

+0

@ Technophobe01 RServer ist auf Windows-Rechner und mein Client kann jeder Windows/Linux/MacOSX sein, der damit verbunden ist. Die Verbindungsanforderung an Rserver wird von der JAVA-Klasse ausgeführt, und später führe ich ein Skript auf Rserve mit Verbindungsobjekt aus und übergebe die Ausgabe des Skripts an die JSP-Seite. – Akki

+0

FYI. Die Version von RServe unter Windows ist begrenzt. Die wichtigste Einschränkung ist "keine parallelen Verbindungen werden unterstützt, nachfolgende Verbindungen teilen sich den gleichen Namensraum"/"Sitzungen werden nicht unterstützt - dies ist eine Konsequenz der Tatsache, dass parallele Verbindungen nicht unterstützt werden". Siehe https://www.rforge.net/Rserve/rserve-win.html unter "Bitte lesen Sie vor dem Download/mit der Windows-Version von Rserve!" –

Antwort

3

zugreifen Wenn Sie die Authentifizierung nach der Verbindung als einen ersten Befehl zu schaffen, müssen Sie die login Befehl auszuführen aktiviert haben. Die Java-Bibliothek hat einen speziellen Wrapper dafür.

Siehe Code unten für Beispiel Anwendungsfall.

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()); 

Außerdem würde ich mit vollständigem Pfad als pwdfile Wert empfehlen.

+0

Verwendet es ssh intern zur Verbindung? Ist es eine Lösung, die sowohl für Windows als auch für Linux funktioniert? – madhavi

+0

Ja, es funktioniert für jedes System (ich habe es mit MacOS X getestet), und nein, es nutzt native Socket-Verbindungen. – Babl

+0

bcz ich folgte Ihrer Lösung und bekam eine org.rosuda.REngine.Rserve.RserveException: Anmeldung fehlgeschlagen, Anfrage Status: Autorisierung fehlgeschlagen \t bei org.rosuda.REngine.Rserve.RConnection.login (RConnection.java:399) Fehler – madhavi

Verwandte Themen