2009-12-25 4 views
0

Comment rendre un lien visible uniquement si un utilisateur authentifié dispose des autorisations correspondantes? J'utilise JSF, et si je comprends bien, je devrais utiliser l'attribut rendered d'un composant qui devrait appeler la méthode booléenne du bean backing.Spring Notions de base sur la sécurité

J'ai même trouvé le code correspondant il y a quelque temps mais maintenant je ne le retrouve plus. Donc, quelqu'un peut-il me donner un exemple d'une telle méthode booléenne qui fonctionne avec la sécurité de printemps? (ou, mieux encore, un lien vers un article qui décrit ce problème).

Répondre

5

Nous utilisons le SecurityContextHolder pour accéder au utilisateur actuellement connecté. Nous utilisons ensuite la méthode utilisateurs getAuthorities() pour obtenir ses rôles, ce qui (à peu près) les éléments suivants:

((UserDetails)SecurityContextHolder.getPrincipal()).getAuthorities(); 
+0

.. et pour résoudre le problème particulier, enveloppez-le dans un getter et utilisez-le dans une expression booléenne. – BalusC

4

L'attribut rendered (et disabled et readonly) ne s'attend pas nécessairement une méthode getter qui retourne boolean comme ceci:

public boolean getBooleanValue() { 
    return this.booleanValue; 
} 

Ces attributs attendent juste une expression booléenne, qui peut être l'un des suivants Exemples:

<h:someComponent rendered="#{myBean.booleanValue}" /> 
<h:someComponent rendered="#{myBean.intValue > 10}" /> 
<h:someComponent rendered="#{myBean.objectValue == null}" /> 
<h:someComponent rendered="#{myBean.stringValue != 'someValue'}" /> 
<h:someComponent rendered="#{!empty myBean.collectionValue}" /> 
<h:someComponent rendered="#{!myBean.booleanValue && myBean.intValue != 0}" /> 
<h:someComponent rendered="#{myBean.stringValue == 'oneValue' || myBean.stringValue == 'anotherValue'}" /> 

le préfixe is est d'ailleurs également permis boolean getters:

public boolean isBooleanValue() { 
    return this.booleanValue; 
} 

Vous pouvez envelopper tout API au printemps de sécurité utilise dans le getter et utiliser dans une expression EL booléenne dans l'un des moyens mentionnés ci-dessus.

Questions connexes