# Allgemeine Frage zu Authentifizierung mittels Servlet API



## Guest0815 (14. Sep 2011)

Hallo,

ich möchte in einer JSF-Anwendung den Login mittels der neuen Servlet Login Funktionalität realisieren. Ich habe auch schon ein paar Tutorials gefunden (z.B. Servlet 3 Programmatic Authentication API), die jedoch alle nicht vollständig sind und deshalb fehlt mir irgendwie der Gesamtkontext. 

Die Vorraussetzungen wären folgende:
(1) Es gibt eine Menge von Seiten, die nur eingeloggte User sehen dürfen.
(2) Diese Seiten sollen auch nicht erreichbar sein, wenn der User direkt die URL aufruft.
(3) Die Userdaten sind in einer Datenbank gespeichert.

Ich würde nun gerne wissen, welche Schritte notwendig sind, um diese Funktionalität zu erreichen. Kann ich dafür beispielsweise am Server eine JDBC Security Realm, im web.xml Security Constraints definieren und die Loginpage wie in dem oben angeführten Tutorial realisieren, oder sind da noch weitere Schritte notwendig?

Gibt es eventuell einen bessern Weg?

Ich hoffe ihr könnt mir hier weiterhelfen und auf den richtigen Weg bringen ;-)


----------



## Vector (15. Sep 2011)

Hallo. Für meine Webapplikation habe ich es immer simpel gelöst (das heisst natürlich nicht das es perfekt ist).

Als aller erstes würde ich das Servlet dafür benutzen um wie gesagt den Login zu realisieren.
Anschließend habe ich bei meinen Applikationen immer eine Security-Regel am Anfang der Seite definiert:

```
<h:body>
        <ui:composition>
            #{authenticationBean.securityRedirect()}
        </ui:composition>
    </h:body>
```

Hier als Beispiel mit einer Template funktion. Anschließend dann auf jeder Seite die nur für
eingeloggte Benutzer verfügbar sein soll:

```
<ui:insert name="security">
                <ui:include src="/templates/security.xhtml"/>
            </ui:insert>
```

Und anschließend noch die ManagedBean "authenticationBean": 

```
public void securityRedirect() {
        if (!isLoggedIn()) {
            try {
                FacesContext.getCurrentInstance().getExternalContext().
                        redirect("/index.xhtml");
            } catch (IOException ex) {
            }
        }
    }
```

Sobald der User also nicht eingeloggt ist wird er zur index.xhtml weiter geleitet. 
Zusätzlich würde jede Seite noch noch mit einem <h:form> tag umschließen und darin
das rendered Attribut so setzen das wirklich nur was angezeigt wird wenn der User eingeloggt ist.

Ich hoffe ich konnte dir ein bisschen weiter helfen.
Grüße


----------



## Guest0815 (15. Sep 2011)

Hallo Vector,

vielen Dank für Deine Antwort. Das wäre natürlich auch eine Methode. Eine Frage habe ich allerdings noch (fange gerade erst an mich mit JavaEE zu beschäftigen ). Wie genau machts Du das Login über das Servlet. Baust Du da Deine eigene JDBC Verbindung auf, um den Usernamen und das Passwort zu holen? Ist dazu noch irgendeine Konfiguration nötig? Hast Du dazu eventuell auch noch ein paar Codeschnipsel?


----------

