我使用自定义Realm在GlassFish 3服务器上的JSF 2.0应用程序中配置了基于表单的登录。获取有关已登录用户的信息的最简单方法是什么,即用户名。
这可能吗?或者当前会话是否与安全角色相关联?如果是这样,是否有一些方法可以在不更改登录配置的情况下实现这一目标?
简单地说,我想要的是显示一条简单的信息:
以用户名
登录
在我的网页上。
答案 0 :(得分:20)
通过JSF 2.0中的EL(表达式语言)获取登录用户的最简单方法是:
#{request.remoteUser}
Tobbe的答案很适合从支持bean中获取远程用户。
答案 1 :(得分:15)
简单(可能不是最好的)答案是:
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser()
我很震惊我花了多长时间才弄明白。
答案 2 :(得分:0)
在你的loginmanagedbean类中定义一个currentUSer并在getter中:我没有在系统中使用外部日志记录,这对我有用。
public Login getCurrentUser() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext externalContext = fc.getExternalContext();
if (externalContext.getUserPrincipal() == null){
logger.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!current principal is null");
}
else{
Integer id = Integer.parseInt(externalContext.getUserPrincipal().getName());
logger.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LOGGED USER "+ id);
try {
currentUser = getLoginService().getLoginById(id);
}
catch (Exception ex) {
}
}
return currentUser;
}
答案 3 :(得分:0)
在Facelets中,您可以使用#{request.userPrincipal.name}
。