Est-ce que (isUserInRole ()) est le moyen le plus simple d’attacher des permissions / sécurité utilisateur à un bouton JSF?

J’ai récemment développé une application Web tomcat dans JSP qui utilise une sécurité déclarative (server.xml / web.xml) liée à Active Directory de la société. On m’a demandé d’append le soutien de JSF au projet naissant. Il était simple de convertir le formulaire de connexion en jsf, et le modèle de sécurité fonctionnait toujours.

Un associé m’a demandé si je pouvais permettre à un public plus large de voir l’un des rapports, mais de ne rendre les boutons d’action que pour un groupe plus petit. Étant nouvelle à JSF, je devais faire des recherches.

J’ai passé environ quatre heures à googler des choses telles que “sécurité du bouton jsf” et “permissions du bouton jsf” et à essayer diverses suggestions qui étaient pour la plupart sans issue. Un autre associé avait suggéré d’utiliser le modèle de sécurité Spring, mais je ne voulais pas traiter avec un grand nombre de bibliothèques Spring s’il existait un moyen plus simple de le faire.

Finalement, je suis tombé sur la réponse, qui était incroyablement simple. Je devais seulement utiliser la méthode HttpServletRequest: isUserInRole () pour déterminer si l’utilisateur actuellement connecté était autorisé à voir les boutons d’action. J’ai utilisé HttpServletRequests BEAUCOUP au cours des dix dernières années, mais je ne me souviens pas d’avoir jamais entendu parler de cette méthode. Avec jsf, il est simple d’obtenir cette méthode, comme indiqué ci-dessous:

public boolean isUserInRole(Ssortingng role) { return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role)); } 

Mes questions sont spécifiquement les suivantes: y a-t-il des pièges à propos de cette approche dont je devrais être au courant, et existe-t-il un autre moyen plus simple de le faire?

Si vous utilisez Tomahawk comme complément à votre implémentation JSF, la plupart des contrôles ont un atsortingbut visibleOnUserRole. Vous pouvez utiliser plusieurs noms de rôle dans la valeur.