如何使用JSF / MyFaces基于用户角色创建条件?
题
我有哪些选项可以从JSP页面中读取当前用户的角色?我知道Tomahawk组件上的 visibleOnUserRole =" myRole"
属性,但我需要的角色比简单的可见性更复杂。
解决方案
ExternalContext 公开了用户和角色信息。
public class RolesAccess implements Serializable {
public String getUserPrincipalName() {
FacesContext context = FacesContext.getCurrentInstance();
Principal principal = context.getExternalContext().getUserPrincipal();
if(principal == null) {
return null;
}
return principal.getName();
}
public String getUser() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getExternalContext().getRemoteUser();
}
public boolean isManager() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getExternalContext().isUserInRole("manager");
}
}
如果您在servlet中使用JSF,则此信息将映射到 HttpServletRequest 。
您可以使用托管bean通过向视图公开值表达语言。
<f:view>
<h:outputLabel value="#{rolesBean.userPrincipalName}" />
<h:outputLabel value="#{rolesBean.user}" />
<h:outputLabel value="#{rolesBean.manager}" />
</f:view>
其他提示
在Java EE 6中(在询问/回答此问题时不可用),您可以直接从Facelets代码中的 request
变量测试角色。这非常方便。
E.g。
<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
不隶属于 StackOverflow