En respuesta a @wasimbhalli, hay dos razones que he encontrado que la expresión siempre volvería falsa:
El nombre de la función es sensible a mayúsculas. rendered="#{facesContext.externalContext.isUserInRole('ADMIN')}"
puede devolver false
, pero pruebe rendered="#{facesContext.externalContext.isUserInRole('admin')}"
, o rendered = "# {facesContext.externalContext.isUserInRole ('Admin')}".
tiene que definir sus papeles en tanto web.xml
(o como anotaciones) y el mapa en glassfish-web.xml
.
La siguiente es la forma de especificar un papel en 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>
La siguiente es la forma de asignar el grupo de autenticación al papel en 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>
En mis pruebas fue necesario para hacer el mapeo incluso cuando los nombres eran los mismos, como muestro en mi código de ejemplo. También en mis pruebas, traté de definir solo el mapeo y solo definir el rol en web.xml
, y tampoco funcionó. Necesitaba ambos, como especificar el nombre del rol en el caso correcto.
JSF 1.xo 2.x? – BalusC
2.x, Glassfish 3.1 – TC1
En el futuro, agregue la etiqueta '[jsf-2.0]' para indicar que :) – BalusC