# Loginfunktion?



## sicLotus (21. Mai 2011)

Hallo, ich bin noch neu im J2EE Bereich, allerdings würde ich gerne ein Projekt umsetzen wollen und dafür möchte ich gerne einen Login-Bereich basteln.

Das Formular wird natürlich mit JSP gebastelt, die Logik dahinter aber mit Java. Ich weiß nur nocht nicht so recht, wie man das jetzt am besten angeht? Rein theoretisch gibts ja in Servlets die Möglichkeit Attribute oder bestimmte Sachen im Session-Attribut zu speichern. Ich würde vermuten das ich damit arbeiten müsste/sollte oder?

Weiß jemand vllt nen Buch oder ne Internetseite wo man nicht nur Theorie, sondern auch ein bisschen Praxis näher gebracht wird?


----------



## Marcinek (21. Mai 2011)

Hallo,

für diesen Anwendungsfall gibt es 10000000 Treffer bei googel.

Wenn es punktuelle Fragen gibt, kannst du sie hier stellen.

Gruß,

Martin


----------



## Final_Striker (21. Mai 2011)

Wenn du gerade mit JEE anfängst, würde ich mir an deiner Stelle JSF anschauen.

Ansonsten: JSP - Servlets: Full Login Example


----------



## sicLotus (21. Mai 2011)

Naja, bei Google kommt wohl zu jedem Suchbegriff zig tausend Treffer, die Frage ist nur ob die alle sinnvoll sind.
Okay trotzdem mal die erste Frage:
Kann ich das nur auf Basis von JSP machen oder muss ich da auch mit Servlets oder so arbeiten?


----------



## maki (21. Mai 2011)

JAAS, Realms, etc. sind gute Suchbegriffe.


----------



## Gelöschtes Mitglied 5909 (21. Mai 2011)

@Final_Striker: In dem Tut werden user und pw per GET übertragen...


----------



## sicLotus (22. Mai 2011)

Ich habe folgendes Tutorial gefunden:
Servlet Login : AuthenticationServletJava Tutorial

Was haltet ihr davon? Meine Frage dazu wäre allerdings:
Wie überprüfe ich jetzt (allowUser), ob zum einen der Username in der Datenbank vorhanden ist und ob das Passwort stimmt?
Soll ich direkt auf die Datenbank zugreifen, oder soll ich lieber auf meine Verwaltungsklasse mit den UserObjekten zugreifen?

Also ich hab mir ja ein DAO geschrieben womit ich die Daten von der Datenbank in meine VO's schreibe. Ich würde dann wohl noch ein UserBO schreiben und dort dann nach dem Element suchen? Irgendwie komisch, wäre es nicht sinnvoller direkt in der Datenbank danach zu suchen?

Es wär irgendwie günstiger, wenn mein UserDAO ne Methode findByName oder so hätte, oder?


----------



## Gelöschtes Mitglied 5909 (23. Mai 2011)

da wird es wenigstens per POST gemacht, schon besser.

Was spricht denn gegen eine findByName methode in denem dao? Für sowas ist das dao schließlich da..


----------



## sicLotus (23. Mai 2011)

Ja ich weiß auch nicht.. hab wohl zu quer gedacht, ich werd einfach im DAO eine findbyNameAndPassword Methode schreiben.. dann muss ich nichtmal das Passwort in der Logik gegenchecken..


----------



## Gelöschtes Mitglied 5909 (23. Mai 2011)

Du solltest das passwort nicht Plaintext speichern (siehe sony )

Nehm stattdessen ein hashing algorithmus (am besten SHA)


----------



## sicLotus (23. Mai 2011)

jah,ich hatte bisher den "password" algorithmus genommen.. ich werd wohl nochmal gugn was es da alles gibt bzw was am besten mit java auch gemacht werden kann


----------



## sicLotus (23. Mai 2011)

Hallo,

ich hätte nochmal eine Frage.. speziell zur web.xml

Ich habe ja oftmals ein <form action=".."> jetzt folgendes:
In dem Tutorial wurde das LoginHandler.do genannt, warum? Gibts dafür irgendwelche Konventionen?
In der web.xml wurde das dann per url-pattern gematcht, allerdings mit <url-pattern>*.do</url-pattern>

Jetzt wollte ich auch noch ne Registrierung schreiben und hatte da RegisterHandler.do genommen.. ich schätze jetzt werde ich immer wieder auf Fehler stoßen, weil beide auf .do enden..

Nen hard-coded url-pattern wie z.B. <url-pattern>/mysite/RegisterHandler.do</url-pattern> würde ich ungern schreiben, dann könnte man niemals die verzeichnisstruktur aendern oder so.. oder was sagt ihr?


----------



## JanHH (23. Mai 2011)

Mir kommts so vor, als wüsstest Du noch gar nicht, welche der vielen, vielen Technologien, die es zum basteln einer Webanwendung gibt, Du überhaupt benutzen willst.. also erstmal für eine entscheiden wäre von Vorteil, dann beantworten sich die meisten Fragen von selber, weil es für quasi alles vorgefertigte Standardmethoden gibt.

Servlets und JSPs sind ja eher "low level"-APIs, die nicht allzuviel komfort bieten, aber auch nicht allzuviel Lernaufwand erfordern. JSF 2.0 beispielsweise ist schon erheblich leistungsfähiger, aber auch komplexer zu erlernen. Wenn ich jetzt eine neue Webanwendung anfange, würde ich wohl JEE 6/JSF 2.0/JPA 2/CDI nehmen, rundum "runde Sache", allerdings auch viel zum Lernen, wenn man da Neuling in der Materie ist. Also fang doch einfach mal mit JSF 2.0 an..

was die eigentliche Frage angeht, im Allgemeinen speichert man die Information, ob ein User eingeloggt ist, bzw. um welchen User es sich handelt, und welche Rollen/Rechte er hat, in einer Variablen im Session-Kontext des Servlets. Dafür gibts aber auch jede Menge vorgefertige Standardvarianten (wie z.B. die identity-Komponente bei seam), die aber alle darauf basieren.


----------



## sicLotus (23. Mai 2011)

Danke JanHH, aber Servlets und JSP waren Vorgabe, da kann ich also nicht so viel drehen.


----------



## JanHH (24. Mai 2011)

Das geht aber aus Deiner Frage nicht klar hervor ;-).


----------



## sicLotus (24. Mai 2011)

Jah, zu dem Zeitpunkt war ich noch etwas verwirrt wie man was genau umzusetzen hat..
Im Endeffekt bastel ich mir jetzt ne JSP mit dem Form und wenn dieses abgesendet wird, wird das an das entsprechende Servlet geleitet.


----------



## sicLotus (24. Mai 2011)

Sorry für den DP, aber ich hätte da eine Frage:
Bei der Registrierung rufe ich ja die createUser Methode in meinem DAO auf.
Das ganze wirft zur Zeit aber noch eine Exception, wenn ein User mit der selben Emailadresse/Nutzername schon existiert.
Daher die Frage:
Wo und wie soll man das am besten abfangen? Zum einen könnte ich das direkt im DAO in der createUser Methode abfragen..
Andernfalls könnte ich das auch in meiner Buisiness Logik (welche meine DAOs kapselt) abfragen/abfangen. Auf die Datenbank muss man aber sowieso zugreifen, wenn ich das nicht direkt in der createUser Methode mache, muss ich also zweimal eine Verbindung herstellen(zumindestens dann, wenn noch kein solcher User existiert).

Was genau ist die saubere Lösung?


----------

