Loginproblem bei Webservice
lima-city → Forum → Programmiersprachen → Java
abhilfe
code
dank
erstellen
fehler
funktion
instanz
interface
jemand
kopieren
login
materie
objekt
problem
schleife
server
string
variable nutzen
verstehen
zugreifen
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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 -
sockets bei nem webservice??
läuft doch alles über die wsdl oder versteh ich da was falsch? -
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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage