Comment contrôler l'accès et les droits dans le JSF?
Je voudrais contrôler l'accès après l'utilisateur de se connecter à mon système.
Par exemple:
administrator : can add, delete and give rights to employee
employee : fill forms only
...
Donc, après avoir pris connaissance de qui de droit, l'utilisateur a, l'enregistrement en base de données, je voudrais limiter ce que cet utilisateur peut voir et à faire.
Il existe un moyen simple de le faire ?
MODIFIER
@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() {
}
}
- Comment êtes-vous authentifier les utilisateurs? Par gérée par le conteneur d'authentification (
j_security_check
ourequest.login()
) ou par un homebrewed filtre de servlet sur un attribut de session? - mon ami! Longtemps pas de parler avec vous. Je suis à l'aide d'un filtre de servlet qui vous enseigne-moi, il y a longtemps, que je vais poster ici.
- Vous pouvez le vérifier out jguard.sourceforge.net/mvnsite/docbook/... Nous avons eu à créer un personnalisé EL fonction pour vérifier si un utilisateur a un rôle bien (à utiliser dans le rendu des attributs par exemple)
- Je suis assez curieux au sujet de moi-même. Ne peut pas vraiment rappeler le champ d'application de couture 3 de sécurité, ni des concepts similaires dans codi, mais elles peuvent être utiles. Deltaspike va ajouter ce pour v 0.4 (le prochain) iirc. J'ai aussi jeté un coup d'oeil à apache shiro, mais a décidé contre elle. J'ai décidé de stopper mon auth logique pour l'instant et d'attendre pour v. 04 de deltaspike
Vous devez vous connecter pour publier un commentaire.
Eh bien, c'est un très vaste sujet. Comme vous êtes en commençant avec des homebrewed d'authentification, je vais cibler la réponse sur homebrewed autorisation.
Rôle de la vérification en Java/JSF est à son propre relativement simple si le modèle est intelligemment conçu. En supposant qu'un utilisateur peut avoir plusieurs rôles (comme c'est souvent le cas dans les applications du monde réel), vous pourriez, à terme, de finir par avoir quelque chose comme:
de sorte que vous pouvez vérifier la façon suivante dans votre JSF vues:
et dans votre filtre:
La partie la plus difficile est la traduction de ce modèle Java pour une saine DB modèle. Il y a différentes façons selon les exigences de l'entreprise, chacune avec sa propre (dés)avantages. Ou peut-être vous avez déjà un DB modèle sur lequel vous avez la base de votre modèle Java (donc, vous avez besoin pour la conception de bas en haut)?
De toute façon, en supposant que vous êtes en utilisant JPA 2.0 (votre question, histoire au moins le confirme) et que vous pouvez la conception de haut en bas, l'un des moyens les plus faciles à cartographier la
roles
propriété comme un@pour valeur elementcollection
contre unuser_roles
table. Comme nous sommes à l'aide d'unRole
enum, un deuxièmerole
tableau n'est pas nécessaire. Encore une fois, cela dépend du béton les exigences fonctionnelles et opérationnelles.Dans SQL générique termes, la
user_roles
table peut ressembler à ceci:Qui est mappé comme suit:
C'est essentiellement tout ce que vous aurez besoin de changer dans votre
User
entité.À côté de homebrewed d'authentification (login/logout) et l'autorisation (rôle de la vérification), il y a aussi Java EE fourni gérée par le conteneur d'authentification avec lequel vous pouvez connexion par
j_security_check
ouHttpServletRequest#login()
, filtre les requêtes HTTP par<security-constraint>
web.xml
, vérifiez l'utilisateur connecté par#{demande.remoteUser}
et ses rôles par#{demande.isUserInRole('ADMIN')}
, etc.Alors il y a plusieurs 3ème partie des frameworks tels que PicketLink, Printemps De Sécurité, Apache Shiro, etc. Mais tout cela est hors de question 🙂