In risposta a @wasimbhalli, ci sono due ragioni che ho trovato che l'espressione avrebbe sempre return false:
Il nome del ruolo è case sensitive. rendered="#{facesContext.externalContext.isUserInRole('ADMIN')}"
può restituire false
, ma provare rendered="#{facesContext.externalContext.isUserInRole('admin')}"
o render = "# {facesContext.externalContext.isUserInRole ('Admin')}".
È necessario definire i ruoli in entrambi web.xml
(o come annotazioni) e mapparlo in glassfish-web.xml
.
Il seguente è come specificare un ruolo nella web.ml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<security-role>
<role-name>admin</role-name>
</security-role>
</web-app>
Il seguente è come mappare il gruppo di autenticazione per il ruolo in glassfish-web.xml
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
<security-role-mapping>
<role-name>admin</role-name> <!-- name defined in web.xml or annotations -->
<group-name>admin</group-name><!-- name from authentication mechanism -->
</security-role-mapping>
</glassfish-web-app>
Nel mio test è stato necessario per fare la mappatura anche quando i nomi erano gli stessi, come mostro nel mio codice di esempio. Anche nei miei test, ho provato a definire solo la mappatura e solo a definire il ruolo in web.xml
e nessuno dei due ha funzionato. Avevo bisogno di entrambi, come specificando il nome del ruolo nel caso corretto.
JSF 1.xo 2.x? – BalusC
2.x, Glassfish 3.1 – TC1
In futuro, si prega di aggiungere il tag '[jsf-2.0]' per indicare che :) – BalusC