String sql="wähle * aus reg wo username = '" + user + "' und pass = '" + pwd + "'";
Das ist eine extrem schlechte Übung. Dieser Ansatz erfordert, dass sowohl der Benutzername als auch das Passwort durch Anfragen an Plain Vanilla weitergeleitet werden. Außerdem haben Sie dort eine SQL-Injection-Angriffslücke.
Nutzen Sie Sitzungen, in JSP / Servlet haben Sie die HttpSession
für. Es ist wirklich auch nicht nötig, die DB bei jeder Anfrage immer wieder mit einem Filter
zu treffen. Das ist unnötig teuer. Setzen Sie einfach User
in Sitzung mit Servlet
und verwenden Sie Filter
, um die Anwesenheit bei jeder Anfrage zu überprüfen.
Beginnen Sie mit einem /login.jsp
:
Erstellen Sie dann ein LoginServlet
, das auf url-pattern
von /login
abgebildet ist und das doPost()
wie folgt implementiert hat:
Dann erstellen Sie eine LoginFilter
, die auf url-pattern
von /secured/*
abgebildet ist (Sie können aber auch Ihre eigene auswählen, zB /protected/*
, /restricted/*
, /users/*
, usw.), aber diese muss mindestens abdecken Bei allen gesicherten Seiten müssen Sie die JSPs in den entsprechenden Ordner in WebContent einfügen und% code_de% wie folgt implementieren:
Das sollte es sein. Hoffe das hilft.
Um zu erfahren, wie ein doFilter()
aussehen würde, finden Sie dies Artikel nützlich. Sie erfahren auch, wie Sie UserDAO
verwenden können, um Ihre Webanwendung vor der SQL-Injektion zu schützen Angriffe.
Verwenden Sie eine vorbereitete Anweisung, Ihr Code ist eine offene Einladung für eine SQL-Injektion .
%Vor%Nun zu Ihrer Frage, überprüfen Sie bitte:
So viele Dinge sind falsch mit diesem ...: - /
select * from reg
ist unnötig, da Sie nur wissen wollen, ob eine Zeile existiert. Wenn Sie stattdessen select 1
verwenden, muss die Datenbank den Inhalt der Zeile nicht überprüfen und die Abfrageergebnisse nur aus dem Index liefern. Wenn Sie erwarten, dass viele Zeilen vorhanden sind, wäre select 1 where exists ...
schneller, da die DB die Abfrage dann abkürzen könnte, nachdem sie mindestens eine Zeile gefunden hat. finally
blocks. Dies bedeutet, dass sie nicht immer entsorgt werden (z. B. wenn ein SQLException
ausgelöst wird), was zu Ressourcen- und Verbindungslecks führt. Zuallererst sollten Sie dafür parametrisierte Abfragen verwenden. Wenn der Benutzer '";DROP TABLE reg;
als Benutzernamen eingibt, wird es große Probleme geben.
Sind Sie sicher, dass Benutzername und Passwort korrekt sind? Wie wäre es mit Groß- und Kleinschreibung?
Tags und Links authentication jsp servlets servlet-filters login