niedenzu

Hints and tricks for developers

Martins Amazon Wunschliste

CSS Pseudo-Klassen 3. April 2017

Pseudo-CSSClass



http://www.w3schools.com/CSS/css_pseudo_classes.asp

No Comments on CSS Pseudo-Klassen

Tomcat Authentication: Wie zeige ich den Grund für einen Authentifizierungsfehler an? 9. September 2010

Im Tomcat bietet es sich an, die J2EE Authentifizierung für geschützte Resourcen zu verwenden. Das Verfahren ist recht simpel einzurichten und wird auf vielen Seiten im Internet erklärt, z.B. hier.

Diese Einfache Methode der Authentifizierung leitet den User auf eine Login-Seite, falls er eine geschützte Resource aufrufen möchte, aber noch nicht angemeldet ist. Auf dieser Login-Seite wird ein Formular angezeigt, in das er Username und Passwort eingeben muss.

Schlägt die Authentifizierung aus irgend einem Grund fehl, wird der User auf die in der web.xml eingestellte Error-Seite weitergeleitet. In den meisten Anwendungen ist die Error-Seite die Login-Seite mit einem Hinweistext, dass die Authentifizierung nicht möglich war. Manchmal wird noch ein Link angeboten, über den der User sein Passwort zurücksetzen kann.

Bsp:

Das Problem ist jedoch, dass es auch andere Gründe für eine fehlgeschlagene Anmeldung geben kann, außer dass Username oder Passwort falsch eingegeben wurden:

  • Passwort ist abgelaufen.
  • Passwort wurde zu oft falsch eingegeben.
  • Konto wurde wegen Inaktivität gesperrt.
  • u.s.w.

Diese Informationen können dem User jedoch bei Verwendung der Standard-Authentifizierung nicht angezeigt werden.

Abhilfe schafft hier die Implementierung eines eigenen Valves zur Form-Authentifizierung. Die Klasse muss von org.apache.catalina.authenticator.FormAuthenticator abgeleitet werden (ganz richtig, das ist eine Tomcat-spezifische Klasse!). In dieser Klasse wird die Methode forwardToErrorPage() überschrieben. Die Methode wird vom Tomcat aufgerufen, nachdem die Authentifizierung fehlschlug und der User zur Error-Seite geleitet wird.

Eine Beispiel-Implementierung:


public class CustomFormAuthenticator extends FormAuthenticator {

@Override
protected void forwardToErrorPage(Request request, Response response,
LoginConfig config) throws IOException {
Integer errorReason = checkOutErrorReason();

request.setAttribute("loginErrorReason", errorReason);
super.forwardToErrorPage(request, response, config);
}

protected void checkOutErrorReason() {
//TODO hier die Ermittlung der Ursache für die
// abgelehnte Authentifizierung implementieren
return null;
}

}

In diesem Beispiel wird ein Request-Parameter gesetzt (loginErrorReason), der dann in der Error-Page ausgewertet werden kann.
Bsp.:


Integer errorReason = (Integer) request.getAttribute("loginErrorReason");

Wichtig ist, dass der CustomFormAuthenticator in einem jar im Tomcat/lib-Verzeichnis deployt wird, damit der Tomcat die Klasse findet.

Das Valve muss dann dem Tomcat noch in der Konfiguration im Context der Web-Anwendung (in server.xml) mitgeteilt werden:


...
<Context docBase="myapp" path="" reloadable="true">
<Valve className="custom.auth.CustomFormAuthenticator" />
</Context>
...

Eine andere Möglichkeit der Konfiguration besteht in der Web-Anwendung in der Datei META-INF/context.xml:


<Context>
<Valve className="custom.auth.CustomFormAuthenticator" />
</Context>
No Comments on Tomcat Authentication: Wie zeige ich den Grund für einen Authentifizierungsfehler an?
Categories: Java Tomcat
Martin Rocks