Fehlermeldung bei misslungener Anmeldung

Kenan89

Bekanntes Mitglied
Hallo,
wie kriege ich es mit JSP hin, dass bei einem Loginfenster eine Fehlermeldung erscheint, falls der Benutzer einen falschen Benutzernamen oder Passwort eingetragen hat?

Ich habe ein Formular auf meiner login.jsp. Beim Klick auf den Login Button wird man zu checkLogin.jsp weitergeleitet, welche ein Objekt einer Java Klasse LoginCheck.java erstellt. Dieser prüft mit einem preperadStatement nach, ob benutzername in Tabelle xy ist und dann ob das Passwort mit dem eingegebenen übereinstimmt. Dementsprechend wird in der Klasse ein boolean success auf true oder false gesetzt.

Durch die Getter methode greift die checkLogin.jsp auf diesen Boolean zu und leitet User entweder zurück zum LoginFenster oder eben in die interne Seite falls Username und PW stimmen. Wenn man jetzt
aber zurück zur loginseite weitergeleitet wird, also zur login.jsp, wie kriege ich es hin, dass da ein Fehler erscheint? Ich kann ja der login.jsp keine Variable durch die checkLogin.jsp übergeben, wenn ich weiterleite.
 

Kenan89

Bekanntes Mitglied
Okay, ich habe herausgefunden, dass das mit Sessions möglich ist.
Man gibt ja Sessions einen key Value Wert, nämlich session.setAttribute("xy", "xy").

Jetzt kann man ja Sessions mit session.invalidate() löschen.
Dadurch wird aber der gesamte Session gelöscht. Kann ich nicht einen key Wert des Sessions löschen?
z.B. nur den xy wert im Beispiel oben?
 
S

SlaterB

Gast
warum sollte in dieser Situation in der Session überhaupt etwas gelöscht werden,
wo siehst du ein invalidate()? wer ruft das auf?
wenn es dir um die reinen fachlichen Daten geht, kannst du ja auch eine individuelle Löschung nur bestimmter Attribute
bzw. alle außer Ausnahmen durchführen

dann gibt es statt Session auch noch den Request, auch dort kann man Attribute ablegen,
das ist vielleicht generell die bessere Lösung hier
 

Kenan89

Bekanntes Mitglied
Ich hätte eine Frage...
Ich habe jetzt ein login-Skript geschrieben:

login.jsp
Java:
<!DOCTYPE html>
<html>
<head>
	<title>Login-Skript</title>
	<link rel="stylesheet" type="text/css" href="../css/style_loginseite.css" />
	<script type="text/javascript" src="../javascript/jquery-1.7.2.min.js"></script>
	<script type="text/javascript" src="../javascript/script.js"></script>
</head>
<body>

<div id="login">
	<div id="loginHeader">
		<p>Login</p>
	</div>
		
	<form autocomplete="off" method="post" action="../funktionen/checkLogin.jsp">
		<table>
			<tr>
				<td>
					<%
						HttpSession loginFehler = request.getSession();
						if(loginFehler.getAttribute("fehler")!=null){
							out.println("<span style='color: red; font-weight: bold;'>Please correct!</span>");
							loginFehler.invalidate();
						}
					%>
				</td>
			</tr>
			<tr>
				<td>
					Name:
   				</td>
				<td>
					<input type="text" name="username" />
				</td>
			</tr>
			<tr>
				<td>
					Passwort:
				</td>
				<td>
					<input type="password" name="password" />
				</td>
			</tr>
			<tr>
				<td>
					<br><button>Login</button>
				</td>
			</tr>
		</table>
	</form>	
</div>

</body>
</html>


checkLogin.jsp
Java:
<%@ page import="javax.servlet.http.HttpSession"%>
<%@ page import="database.Datenbankverbindung,database.LoginCheck"%>
<%@ page import="java.sql.Connection"%>
<%  
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	boolean success;

	Connection conn = null;

	Datenbankverbindung datenbankverbindung = new Datenbankverbindung();
	datenbankverbindung.buildConnection();

	conn = datenbankverbindung.getConnection();

	LoginCheck logincheck = new LoginCheck(conn, username, password);
	logincheck.checkLogin();

	success = logincheck.getSuccess();//ein boolean wert der im servlet LoginCheck auf true/false gesetzt wird

	datenbankverbindung.closeConnection(conn);
	
	if (success) {
		session.setAttribute("username", username);
		response.sendRedirect("../ui/intern.jsp");
	} else {
		session.setAttribute("fehler", "fehler");
		response.sendRedirect("../ui/login.jsp");
	}	
%>

intern.jsp
Java:
<!DOCTYPE html>

<html>

<head>
	<title>piloFrog</title>
	<link rel="stylesheet" type="text/css" href="../css/style_frog.css">
	<script type="text/javascript" src="../javascript/jquery-1.7.2.min.js"></script>
	<script type="text/javascript" src="../javascript/script.js"></script>
</head>

<body>

	<div id="intern">		
		<table id="header">
			<tr>
				<td>
					Hallo, <% out.println(session.getAttribute("username")); %>
				</td>
				<td>
					<p id="logout"><a href="login.jsp">Logout</a></p>
				</td>
			</tr>
		</table>
		
		<div id="content">	
		</div>
	</div>
	<a href="login.jsp">zurück</a>
</body>

</html>


Die Frage ist, wie ich das mit den Sessions so hinkriege, dass der Browser, falls der user login.jsp aufruft, ihn nach intern.jsp umleitet, sofern die session.getAttribut("username") existiert.

EDIT:
Ich habe gelesen, man sollte sich eine neue session anlegen, damit keiner von jemanden die session klauen und sich als er anmelden kann. Geht das?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
mit einfachen JSPs und Java-Code solltest du vorerst nicht über Session klauen nachdenken, soviel dazu,
Session anlegen praktisch auch nicht, passiert eher im Hintergrund wenn ich mich recht erinnere

checkLogin.jsp ist ja mal eine völlig verkehrte JSP, da wird überhaupt nichts angezeigt,
das einzige was du da erreichst, ist, eine komplette normale Java-Klasse umständlich in ein jsp-Textdokument reinzustecken,
ich weiß nicht ob es inzwischen IDEs gibt die das ganz normal bearbeiten, zu meiner Zeit mit JSPs wäre das jedenfalls ein Rückschritt auf Texteditor-Ebene

es gibt auch Servlets!, schon davon gehört? das sind ganz normale schöne Java-Klassen mit allen drum und dran,
JSPs werden ja letztlich intern auch zu Servlet-Klassen umgewandelt, der Hauptteil sollte HTML usw. sein was sich
wiederum in Java-Klassen nicht so schön einarbeiten läßt

------

ich rate dringends davon ab, je von einer JSP an andere weiterzuleiten, kann dir dabei also auch nicht weiterhelfen,
bzw. doch mit Vermutung: du müsstest eben login.jsp wie checkLogin.jsp aufbauen, dort gar nichts ausgeben sondern
an 'realyLogin.jsp' weiterleiten oder eben nicht

das korrekte Vorgehen in meinen Augen sieht vor, das ausnahmslos jeder Request immer erst zunächst an ein Servlet geht,
an eine richtig schöne Java-Klasse, dort wird alles geprüft was zu prüfen ist und entweder an die zugehörige JSP als normale Anzeige oder an Login oder Fehlerseite oder sonstiges verwiesen,
checkLogin.jsp ist ja wiegesagt so eine Vorstufe, nur als Servlet,
und jede normale JSP, jeder Request ist ein zugehöriges Servlet wert,
von Ausnahmen wie 20 gleichartige Gallerie-Seiten vielleicht abgesehen, die aber immer noch ein gemeinsames Servlet bzw. gewisse allgemeine Verarbeitung durchlaufen
 
Zuletzt bearbeitet von einem Moderator:

Kenan89

Bekanntes Mitglied
Wie kann ich aber dem Formular sagen, dass er bei action eine Java-Klasse laden soll. Meines Wissens nach kann man bei "action" nur jsp, html, php seiten, aber keine java klassen eingeben?
 
S

SlaterB

Gast
das hängt alles vom Framework ab,
ein Button erzeugt in erster Linie einen HTML-Request, der sogar an andere Webseiten gehen könnte, ganz ohne Java,
was fürs eigene Programm einzutragen ist, ist wie gesagt variabel,
und wird normalerweise in der web.xml an aufgelöst und weitergeleitet, je nach Framework gibts noch mehr Konfigurationsdateien,
bei dir lässt du vielleicht alles aus und referenzierst direkt JSPs,

Beispiele zu finden ist gerade gar nicht mal so leicht wie ich dachte,
hier nur eine Beispiel-web.xml,
Sample web.xml File
die wohl '/hello' auf das Servlet examples.Hello abbildet,

ah, dazu gehört ein ganzes Tutorial, hier gar eine Seite
Sample Default index.html File
die mit
Code:
      <li>To a <a href="hello.jsp">JSP page</a>.
      <li>To a <a href="hello">servlet</a>.
genau beide Möglichkeiten unterscheidet,
wie man es in Buttons/ Formulare einbaut ist wieder eine Grundlagenfrage,
ich kann nicht alles beantworten, das bisherige schon nur weil ich das selber mal wieder nachschauen wollte ;)
vielleicht auch nur hello eintragen oder /hello oder ähnliches,
muss alles in 500seitigen Lehrbüchern oder guten Tutorials als Beispiele stehen, sonst wäre es ja eh ein Gefrickel
 

Kenan89

Bekanntes Mitglied
Danke für das Beispiel, und ich hätte gleich eine Frage. Was
genau ist denn die Möglichkeit dass die Sessions geklaut
werden können?
Habe gehört, man kann das vermeiden, indem man eine
neue Session definiert, aber wenn man eine neue definiert,
heisst das nicht, dass das Session von einer, z.B. Anmeldung,
nicht mehr beachtet wird, da es ja jetzt eine neue Session
gibt. Das widerrum würde bedeuten, der User ist nicht mehr
angemeldet und müsste seine Eingabedaten neu eintragen.
 
S

SlaterB

Gast
welche Art von Klauen du meinst wäre bei genauerem Focus auch meine Frage,
mit einfachen JSPs, Servlets usw. hier fällt mir wirklich nur ein dass dazu gar nichts zu sagen ist,
jedenfalls nichts zum Webserver selber,

man kann vielleicht den Cookie von einem anderen Rechner kopieren falls nicht auch die IP eine Rolle ist,
und die nicht vielleicht auch vorgetäuscht wird usw.

-----

'nicht mehr angemeldet sein' ist schon ein etwas alltäglicheres Phänomen,
Sessions werden nach 15 Min. oder so beendet, je nach Einstellungen,
das von dir genannte invalidate() bzw. jede sonstiger fachlicher Eingriff in die Daten kann einen Login leicht kaputt machen

inwiefern das gegen ungewissen Klau hilft?
hmm, reichlich unsichere Diskussion gerade, da weiß ich vorerst nichts zu sagen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JSP Fehlermeldung bei Verwendung von Java-Expression-Language Allgemeines EE 8
O Hibernate Fehlermeldung bei start des Servers Allgemeines EE 2
D Fehlermeldung hs_err_pid4104 - Editor Allgemeines EE 8
Y JSF Komische Fehlermeldung nach Deployment und Serverstart Allgemeines EE 5
B Fehlermeldung beim ausführen des Clients // Need Help Allgemeines EE 2
B ich kann mit dieser fehlermeldung nix anfangen? Allgemeines EE 5
K Dateipfad in Fehlermeldung nicht nachvollziehbar Allgemeines EE 3
K Fehlermeldung bei Serverapplikation Allgemeines EE 3
F Fehlermeldung beim redirect in der JSP Allgemeines EE 4
M Fehlermeldung von Class an anderes Servlet und dann in JSP Allgemeines EE 5
G jboss fehlermeldung Allgemeines EE 4
N Validierung:häßliche Fehlermeldung, wie überschreibe ich sie Allgemeines EE 4
F kryptische Fehlermeldung Allgemeines EE 2
B Sun Application Server 8 --- Nichtsaussagende Fehlermeldung Allgemeines EE 2
B Exception - kann mit der Fehlermeldung nix anfangen Allgemeines EE 3
D Login - unbekannte Fehlermeldung Allgemeines EE 3
B IMAP Anmeldung in EJB - Objekt speichern und ständige Anmeldung verhindern Allgemeines EE 18
A @Webfilter - für doppelte Anmeldung Allgemeines EE 0
W Mehrere Applikationenen mit einer Anmeldung möglich? Allgemeines EE 11

Ähnliche Java Themen

Neue Themen


Oben