kostenloser Webspace werbefrei: lima-city


Loginproblem bei Webservice

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    t*********n

    hallo

    könnte mir bitte jemand bei meinem problem weiterhelfen?


    bei meinem webservice (java), können sich die clients gegen das active directory authentifizieren, aber nur wenn der username auch in einer extra sql-datenbank vorhanden ist.

    nach der erfolgreichen authentifizierung wird in der klasse, die vom service gepublished wird eine variable "loggedIN" auf true gesetzt

    wenn diese variable true ist, kann der client die funktionen des webservice ausführen, sonst nicht


    jetzt das problem: loggt sich ein user (client) erfolgreich ein, können alle clients die funktionen ausführen, auch ohne eingeloggt zu sein

    woran könnte das liegen?

    vielen dank schon mal im voraus
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Moin,

    hört sich beinahe so an, als würden alle anderen Clients dieselbe Variable nutzen.
    Überprüfe das mal besser, ob Du neue Instanzen erstellst oder eben nicht.
    Was andere fällt mir grad nicht ein ... denn sowas wie Code sehe ich nicht.

    Gruß,
    Pawnee
  4. Autor dieses Themas

    t*********n

    hier der code:

    main-class:
    WMInterface interf = new WMInterface("jdbc:sqlserver://computernamel:1433;databaseName=databasename;integratedSecurity=false");
    Endpoint.publish(publishPath, interf);



    WMInterface-class (am server):
    private boolean loggedIn = false;
    ..
    .
    .
    public boolean login(String path, String username, String password)
    {
            ADAccess ad = new ADAccess();
            this.loggedIn = ad.authenticate(database, path, username, password);
            return this.loggedIn; //setzt im weiteren code loggedIn auf true (wenn auth erfolgreich)
    }
    .
    .
    .
    public int beispielfunktion()
    {
            if(this.loggedIn == false)
            {//exit the function if not logged in
                return 0;
            }
            else
            {
                 machwas();
            }
    }



    und beim client:
    WMIServer.WMInterfaceService serv = new WMInterfaceService();
    .
    .
    .
    serv.login("ldap://computername:389", "user1", "password1");
    .
    .
    .
    serv.beispielfunktion();



    hoffe das hilft beim verstehen, wollte nicht alles kopieren, da es sonst zu lang wird, aber das ist das wesentliche



    Beitrag zuletzt geändert: 19.4.2009 13:37:20 von the-captain
  5. ok ... klingt zwar beleidigend ... aber es ist ein simpler anfänger fehler :
    du läds das interface in der MAiN-class des servers ... ich würde das aber so lösen :
    main-class :
    serversocket , while-schleife mit accept()-block > instanzierung einer neuen THREAD-class ...
    thread-class :
    streams , connections , interface ...
    kurz um auf deutsch :
    einfach halt in der main class erstmal den serversocket erstellen ... dann mit accept() innerhalb einer while(true) schleife auf connects warten ... das sieht dann so aus :

    ServerSocket ss=new ServerSocket(PORT);
    while(true)
    {
    Socket cs=ss.accept();
    (new threadclass(this, cs)).start();
    }

    das this ist gut wenn du sachen wie broadcasts verwendest *bei chats zum beispiel* oder halt funktionen die der server dierekt ausführen muss bzw bei denen auch daten an andere clients gesendet werden ...
    this sollte in diesem fall nicht dazu verwendet werden auf das main-interface zu zugreifen ... dieses sollte in der thread-class implementiert werden , damit es für jeden clienten neu instanziert wird *was aller dings bei vielen clienten viel overheat erzeugt ...

    wenn jemand ne elegantere lösung hat mal bitte posten...


    SPiKEe
  6. Autor dieses Themas

    t*********n

    sockets bei nem webservice??
    läuft doch alles über die wsdl oder versteh ich da was falsch?
  7. Moin,

    df-t schrieb:
    ok ... klingt zwar beleidigend ... aber es ist ein simpler anfänger fehler

    Wenn man die Materie nicht kennt, sollte man solche Aussagen einfach mal stecken lassen.

    @ the-captain:

    Setz die loggedIn Variable bitte auch in der Login-Methode vorher auf false.
    Dann check mal bitte, ob authenticate da nicht vielleicht Fehler aufweist.

    Erzeugst Du denn für jeden User eine neue Instanz oder werden alle Logins über ein und dieselbe gesteuert?
    Teste einfach mal, wie es sich verhält, wenn Du mehrere Instanzen lieferst.
    Ist zwar nicht wirklich performancefreundlich, aber testweise könntest damit feststellen, ob das Abhilfe schafft.

    Zum Code:
    Boolean werden nicht (mehr) mit == true oder == false verglichen.

    Anstatt dessen einfach die Bedingung aufrufen und evt. negieren:

    if(loggedIn) { ... } // true
    if(!loggedIn) { ... } // false

    Gruß,
    Pawnee

    Beitrag zuletzt geändert: 22.4.2009 16:25:50 von pawnee
  8. Autor dieses Themas

    t*********n

    danke, für die mühe, aber ich habs wegen dem zeitdruck (ist ein projekt für die schule) anders gemacht.

    hab einfach die klasse 'user' erstellt.. mit den variablen ldapPath, username und password..

    der client muss jetzt so ein objekt erstellen und bei den funktionen für die man eingeloggt sein muss mitschicken...
    und am anfang jeder dieser funktionen wird die authentifizierungs-funktion mit den werten des user-objekts aufgerufen

    belastet zwar das netzwerk stärker, reagiert aber auch schneller auf änderungen in der DB und im AD

    so funktionierts einwandfrei

    trotzdem danke

    *EDIT*
    kann geclosed werden

    Beitrag zuletzt geändert: 22.4.2009 18:14:16 von the-captain
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!