針對@wasimbhalli,有兩個原因,我發現,表達總是返回false:
角色名是區分大小寫的。 rendered="#{facesContext.externalContext.isUserInRole('ADMIN')}"
可能會返回false
,但請嘗試 rendered="#{facesContext.externalContext.isUserInRole('admin')}"
或呈現=「#{facesContext.externalContext.isUserInRole('Admin')}」。
您必須在web.xml
(或作爲註釋)中定義您的角色並將其映射到glassfish-web.xml
。
下面是如何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>
指定以下是如何認證組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>
在我的測試是必要的,即使做了映射時的名字是一樣的,因爲我表現出我的示例代碼。同樣在我的測試中,我試圖只定義映射,並且只在web.xml
中定義角色,但都不起作用。我需要兩個,因爲在正確的情況下指定角色名稱。
JSF 1.x or 2.x? – BalusC 2011-01-20 13:22:16
2.x,Glassfish 3.1 – TC1 2011-01-20 13:24:34
未來,請添加`[jsf-2.0]`標籤來表明:) – BalusC 2011-01-20 14:01:50