Authentifizierung über PhaseListener je nach Seite

Status
Nicht offen für weitere Antworten.

mad-din

Bekanntes Mitglied
Hi Leute!

Ich bin gerade dabei für eine kleine Webapplikation eine Anmeldung zu realisieren. Ich dachte mir dabei, am elegantesten gehts über den PhaeListener, also hab ich mir eine LoginListener-Klasse geschrieben, die PhaseListener implementiert. Ich bin auch schon soweit, dass jede Anfrage an die Login-Seite weitergeleitet wird. Meldet sich der User an, kann er auch die Seiten ansehen. So, der grundlegende Ablauf funktioniert jetzt also. Aber es sollen nur bestimmte Seiten und nicht alle Seiten geschützt sein, sondern nur bestimmte. Eine Möglichkeit wäre, in dem LoginListener abzufangen, welche Seite gerade abgerufen wird (müsste doch über fc.getViewRoot().getViewId() gehen...), aber das macht bei vielen Seiten einen enorm hohen Aufwand.

Die einfachste Möglichkeit wäre, irgendwo ein Flag zu setzen, ob die Seite einen Login benötigt oder nicht. Nur wo setzt man so ein Flag?

Danke & viele Grüße,
Martin
 
M

maki

Gast
Warum so umständlich?

Servlets unterstützen Zugriffsschutz von Haus aus, lässt sich in der web.xml konfigurieren.
 

SnooP

Top Contributor
Guck dir vielleicht mal acegi an... wenn du nicht den vorgeschlagenen servlet-weg gehen willst.

der ist im übrigen auch nich soo dufte, weil der form-based-login z.B. nur die Möglichkeit bietet Klartextpasswörter zu speichern... für kleine anwendungen geht das natürlich.
 
M

maki

Gast
der ist im übrigen auch nich soo dufte, weil der form-based-login z.B. nur die Möglichkeit bietet Klartextpasswörter zu speichern... für kleine anwendungen geht das natürlich.
Hi snoop, jetzt hab ich mal ne Frage :)

Hab schon von acegi gehört, allerdings verstehe ich nicht ganz was du mit "weil der form-based-login z.B. nur die Möglichkeit bietet Klartextpasswörter zu speichern" meinst?
In einem cookie? URL?
 

SnooP

Top Contributor
in der datenbank... und beim Übertragen... sprich anstatt wie man das kennt via md5, ssh1 oder blowfish zuerst "hashen" und dann mit dem hashwert des passworts in der db vergleichen, müssen die passwörter im klartext in der db stehen. Im Prinzip kann man das via HTTP Digest Authentication auch machen - da hat man aber keine html-form mehr - was man im 21. Jahrhundert aber dann doch haben möchte imho ;)

ich hab das gleiche Problem mit acegi aber noch nicht gelöst... hatte mir nur mal ein simples tutorial angeschaut und da ging das ganze auch ohne hashen...:

hab's gefunden - reine Spring-Konfiguration (wie einfach *g*):
Code:
<bean id="daoAuthenticationProvider"
        class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="authenticationDao" /> 
    <property name="passwordEncoder">
        <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" />
    </property>
</bean>
 
M

maki

Gast
Naja, die DB hast du ja im Griff, bei der Übertragung hilft HTTPS, dann darf es auch ein Form Login sein.
 

ms

Top Contributor
Was spricht dagegen schon im Browser zu hashen?
Oder hab ich jetzt was falsch verstanden?

ms
 

SnooP

Top Contributor
wieso hab ich die DB im Griff? ... ich will als User ehrlich gesagt nicht, dass jeder Praktikant der Firma wo die DB gehostet wird, meine Passwörter ausspähen kann... https reicht da nich...

wie hasht man im Browser? JS? fänd ich jetzt imho nich so hübsch... kann man natürlich machen... obige Lösung geht auch ohne JS.
 
M

maki

Gast
wieso hab ich die DB im Griff? ... ich will als User ehrlich gesagt nicht, dass jeder Praktikant der Firma wo die DB gehostet wird, meine Passwörter ausspähen kann... https reicht da nich...
Wenn die Passwörter nur als Hashes in der DB stehen, dann "hast du die DB im Griff" ;)

Wenn die Benutzerdaten zwar vom Browser im Klartext übertragen werden, macht das nichts, solange HTTPS benutzt wird.
Dann kann man sogar wieder in Java Has(c)hen...
 

mad-din

Bekanntes Mitglied
Hi!

Also erstmal danke für eure Antworten. Hab mir das Acegi zwar mal angeschaut, aber ich muss ehrlich sagen hier geht es um eine reine JSF-Webapplikation, die nicht mit Spring arbeitet.

Ich dachte an eine einfache Anmeldemethode, die man auch schön in die Website einbauen kann. Klar kann man Servlets über web.xml schützen, aber angenommen ich hab ein Servlet, dass eine Tabelle darstellt und daneben zusätzlich Informationen für angemeldete Benutzer. Dann ist das Servlet einerseits für jeden zugänglich, andererseits müsste es auch geschützt werden und das ist IMHO mit der Authentifizierung über die web.xml-Methode nicht möglich.

Viele Grüße,
Martin
 

SnooP

Top Contributor
Doch genau das ist mit der Authentifizierung via Servlet (form-based-authentification - google mal) und den tomahawk-JSF Komponenten von Apache möglich... dort kannst du bei jeder Komponente abfragen: isUserInRole etc... kannst eine Komponente dann entweder rendern oder disablen (z.B. links oder buttons ausgrauen). Also sehr komfortabel und vermutlich genau das was du willst ;)

Acegi nutzt zwar Spring... aber das einzubauen ist doch recht easy... das schöne an Spring ist ja, dass man es nur soweit nutzen muss, wie man gerade will/benötigt und zusammen mit den Tutorials im Netz sollte das eine machbare Sache werden.

@maki: genau so wie du es gesagt hast, meinte ich es ja ;) ...in DB als hash, der browser sendet an server, der baut ein hash um das klartext-gesendete passwd und vergleich das mit dem Wert in der db.
Bei Form-Based-Authentification ist genau das nicht möglich. Hier hilft nur das versenden via https und vergleichen von klartextpasswörtern so dass ich in der db eben nicht die hashwerte habe sondern auch klartexte...
andere möglichkeit ist via js das passwort im browser zu hashen und dann zu schicken - hier könnte man dann sogar wieder den form-based-authentification nehmen... müsste man halt nur leicht anpassen... aber wie ich schon sagte - du bist dann auf js angewiesen... sofern man JSF verwendet macht das ja nix, weil da brauchts JS eh ;)

gibt's in Prototype&Co. evtl. sogar schon funktionen zum hashen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M user authentifizierung best practice Web Tier 4
R Zugriff auf geschützten Bereich ohne Authentifizierung Web Tier 10
T JSF2 Authentifizierung Web Tier 3
console MVC: Servletweiterleitung umgeht Login Authentifizierung Web Tier 2
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
M Komplett manuelle Authentifizierung mit JSF Web Tier 12
L Validation über ManagedBeans Web Tier 7
K Internationalisierung über Properties Datei Web Tier 6
P JSF ArrayList über InputText befüllen Web Tier 10
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
M JSF Actions über Methodenrückgabe? Web Tier 3
P JSP: Liste in Bean über Session aufbauen Web Tier 6
E JSF Applikation läuft nicht über Tomcat Web Tier 3
M Velocity - Dropdown-Felder über Macro generieren Web Tier 4
M Ton wiedergabe über jsp-Seite Web Tier 2
P For-Schleife mit JSTL über ArrayList Web Tier 8
R Datenbankzugriff über JSP mit JDBC connector ! Web Tier 2
G JSF h:form Tag Login über j_security_check und weiterleiten Web Tier 5
R Array oder Listen einlesen mit JSF über javaserverpage Web Tier 2
G Dateiupload über JSF? Web Tier 5
G Überblick über Web-Technologien Web Tier 2
J JSF Kein Methodenaufruf mit Button möglich durch PhaseListener (redirect) Problem? Web Tier 2
I Im PhaseListener Service Methode aufrufen Web Tier 21

Ähnliche Java Themen

Neue Themen


Oben