Wie Steuern Sie den Zugriff und Rechte in JSF?
Möchte ich Sie zum Steuern des Zugriffs nach dem user log in meinem system.
Beispiel:
administrator : can add, delete and give rights to employee
employee : fill forms only
...
So, nachdem Sie wissen, welche Rechte der Benutzer hat, die Prüfung in der Datenbank, die ich gerne beschränken würden, auf was dieser Benutzer sehen und tun können.
Es gibt einen einfachen Weg, das zu tun ?
BEARBEITEN
@WebFilter("/integra/user/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
Authorization authorization = (Authorization) req.getSession().getAttribute("authorization");
if (authorization != null && authorization.isLoggedIn()) {
//User is logged in, so just continue request.
chain.doFilter(request, response);
} else {
//User is not logged in, so redirect to index.
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/integra/login.xhtml");
}
}
//You need to override init() and destroy() as well, but they can be kept empty.
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
- Wie sind Sie auf die Authentifizierung der Benutzer? Bei container-managed authentication (
j_security_check
oderrequest.login()
) oder durch eine homebrewed servlet-filter auf ein session-Attribut? - mein Freund! Lange nicht mit dir reden. Ich bin mit einem servlet-filter, der Sie mir beibringen, vor langer Zeit, die ich werde es hier posten.
- Sie überprüfen, jguard.sourceforge.net/mvnsite/docbook/... Wir hatten das erstellen eines benutzerdefinierten EL-Funktion, um zu überprüfen, ob ein Benutzer eine bestimmte Rolle, obwohl (zur Verwendung in gerenderten Attribute zum Beispiel)
- Ich bin sehr neugierig auf diese mir. Kann nicht wirklich erinnern, den Umfang der Naht 3 Sicherheit noch ähnliche Konzepte in codi, aber Sie können auch nützlich sein. Deltaspike wird Sie zusätzlich für die v 0.4 (dem nächsten) iirc. Ich habe auch geguckt auf apache shiro entschied sich dann aber dagegen. Ich habe beschlossen, zu stoppen, meine auth-Logik für jetzt und warten Sie, bis v. 04 von deltaspike
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, das ist ein ziemlich breites Thema. Wie bist du angefangen mit homebrewed-Authentifizierung, werde ich das Ziel nicht die Antwort auf homebrewed Genehmigung.
Rolle Check-in Java/JSF ist auf seine eigene relativ einfach, wenn das Modell vernünftig gestaltet. Unter der Annahme, dass ein einzelner Benutzer kann mehrere Rollen haben (wie es oft der Fall in der realen Welt-Anwendungen), Sie würde nämlich gerne am Ende mit etwas wie:
so dass Sie überprüfen können Sie es wie folgt in Ihre JSF-views:
und in Ihrem filter:
Der schwierigste Teil ist die übersetzung dieses Java-Modell zu einem sauberen DB-Modell. Es gibt verschiedene Möglichkeiten, je nach dem konkreten business-Anforderungen, jede mit Ihrer eigenen (dis -) Vorteile. Oder vielleicht haben Sie bereits eine DB-Modell, auf dem Sie haben, um das Java-Modell (also, Sie brauchen, um design bottom-up)?
Jedenfalls davon aus, dass Sie mit JPA 2.0 (Ihre Frage, die die Geschichte zumindest bestätigt dies) und dass Sie design und top-down, einer der einfachsten Wege wäre, die Karte der
roles
Eigenschaft als@ElementCollection
gegen eineuser_roles
Tabelle. Da wir eineRole
enum, eine zweiterole
Tabelle ist nicht notwendig. Wieder, das hängt von der konkreten funktionalen und business Anforderungen.In generische SQL-Bedingungen, die
user_roles
Tabelle kann wie folgt Aussehen:Ist dann wie folgt belegt:
Das ist im Grunde alles, was man hätte ändern müssen in Ihrem
User
Einheit.Neben homebrewed-Authentifizierung (login/logout) und die Berechtigung (Rolle-Prüfung), es ist auch Java EE zur Verfügung gestellt container-managed authentication, mit denen Sie Anmeldung per
j_security_check
oderHttpServletRequest#login()
, filtern von HTTP-Anfragen nach<security-constraint>
inweb.xml
, überprüfen Sie den angemeldeten Benutzer von#{request.remoteUser}
und seine Rollen durch#{request.isUserInRole ("ADMIN")}
, etc.Dann gibt es mehrere 3rd-party-frameworks wie PicketLink, Spring Security, Apache Shiro, etc. Dies ist aber bei allen in Frage 🙂