Shiro propose des balises JSTL pour le contrôle des autorisations dans les pages JSP/GSP, permettant par exemple d'afficher des boutons spécifiques selon les droits de l'utilisateur connnecté.
Importation de la bibliothèque de balises
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
La définition de la bibliothèque se trouve dans le fichier META-INF/shiro.tld, inclus dans le jar shiro-web.jar.
Balise guest
<shiro:guest>
Bienvenue visiteur, <a href="${pageContext.request.contextPath}/login.jsp">connectez-vous</a>
</shiro:guest>
Affiche du contenu spécifique lorsque l'utilisateur n'est pas authentifié, c'est-à-dire pour les visiteurs anonymes.
Balise user
Code Java ``` shiro:user
Bienvenue [shiro:principal/], déconnexion
</shiro:user>
Affiche du contenu lorsque l'utilisateur est authentifié ou connecté via la fonction "Se souvenir de moi".
**Balise authenticated**
shiro:authenticated
L'utilisateur [shiro:principal/] s'est authentifié avec succès
</shiro:authenticated>
Indique que l'utilisateur s'est authentifié correctement via Subject.login, sans utiliser la connexion "Se souvenir de moi".
**Balise notAuthenticated**
shiro:notAuthenticated Non authentifié (y compris la connexion automatique)</shiro:notAuthenticated>
L'utilisateur n'a pas passé par le processus d'authentification Subject.login, y compris les connexions automatiques "Se souvenir de moi".
**Balise principal**
<shiro: principal/>
Affiche les informations d'identité de l'utilisateur, en appelant par défaut Subject.getPrincipal() pour obtenir le principal principal.
Code Java ```
<shiro:principal type="java.lang.String"/>
Équivalent à Subject.getPrincipals().oneByType(String.class).
<shiro:principal type="java.lang.String"/>
Équivalent à Subject.getPrincipals().oneByType(String.class).
<shiro:principal property="username"/>
Équivalent à ((Utilisateur)Subject.getPrincipals()).getUsername().
Balise hasRole
<shiro:hasRole name="admin">
L'utilisateur [<shiro:principal/>] possède le rôle admin<br/>
</shiro:hasRole>
Affiche le contenu de la balise si le Subject courant possède le rôle spécifié.
Balise hasAnyRoles
<shiro:hasAnyRoles name="admin,user">
L'utilisateur [<shiro:principal/>] possède le rôle admin ou user<br/>
</shiro:hasAnyRoles>
Affiche le contenu si le Subject possède au moins un des rôles spécifiés (condition OU).
Balise lacksRole
<shiro:lacksRole name="abc">
L'utilisateur [<shiro:principal/>] ne possède pas le rôle abc<br/>
</shiro:lacksRole>
Affiche le contenu si le Subject ne possède pas le rôle spécifié.
Balise hasPermission
<shiro:hasPermission name="user:create">
L'utilisateur [<shiro:principal/>] possède la permission user:create<br/>
</shiro:hasPermission>
Affiche le contenu si le Subject possède la permission spécifiée.
Balise lacksPermission
<shiro:lacksPermission name="org:create">
L'utilisateur [<shiro:principal/>] ne possède pas la permission org:create<br/>
</shiro:lacksPermission>
Affiche le contenu si le Subject ne possède pas la permission spécifiée.
Shiro propose également plusieurs balises supplémentaires pour le contrôle des autorisations :
Importation d'une bibliothèque de balises personnalisée
<%@taglib prefix="sec" tagdir="/WEB-INF/tags" %>
Exemple
<sec:hasAllRoles name="admin,user">
L'utilisateur [<shiro:principal/>] possède les rôles admin et user<br/>
</sec:hasAllRoles>
<sec:hasAllPermissions name="user:create,user:update">
L'utilisateur [<shiro:principal/>] possède les permissions user:create et user:update<br/>
</sec:hasAllPermissions>
<sec:hasAnyPermissions name="user:create,abc:update">
L'utilisateur [<shiro:principal/>] possède la permission user:create ou abc:update<br/>
</sec:hasAnyPermissions>
hasAllRoles vérifie si l'utilisateur possède tous les rôles spécifiés ; hasAllPermissions vérifie toutes les permissions ; hasAnyPermissions vérifie au moins une des permissions.