如何使用基于表单的安全性显示登录用户,JSF 2.0应用程序

时间:2010-12-29 23:56:01

标签: security java-ee jsf-2 jaas

我使用自定义Realm在GlassFish 3服务器上的JSF 2.0应用程序中配置了基于表单的登录。获取有关已登录用户的信息的最简单方法是什么,即用户名。

这可能吗?或者当前会话是否与安全角色相关联?如果是这样,是否有一些方法可以在不更改登录配置的情况下实现这一目标?

简单地说,我想要的是显示一条简单的信息:

  

以用户名

登录

在我的网页上。

4 个答案:

答案 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}