【发布时间】:2010-09-22 03:35:06
【问题描述】:
我有哪些选项可以从我的 JSP 页面中读取当前用户的角色?我知道 Tomahawk 组件上的 visibleOnUserRole="myRole" 属性,但我需要角色来处理比简单可见性更复杂的事情。
【问题讨论】:
标签: java jsp jsf myfaces tomahawk
我有哪些选项可以从我的 JSP 页面中读取当前用户的角色?我知道 Tomahawk 组件上的 visibleOnUserRole="myRole" 属性,但我需要角色来处理比简单可见性更复杂的事情。
【问题讨论】:
标签: java jsp jsf myfaces tomahawk
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 通过 Expression Language 向视图公开值。
<f:view>
<h:outputLabel value="#{rolesBean.userPrincipalName}" />
<h:outputLabel value="#{rolesBean.user}" />
<h:outputLabel value="#{rolesBean.manager}" />
</f:view>
【讨论】:
在 Java EE 6(在提出/回答此问题时不可用)中,您可以直接从 Facelets 代码中的 request 变量测试角色。这超级方便。
例如
<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
【讨论】: