如何检查用户是否已登录?

时间:2011-12-04 09:18:39

标签: jsf jsf-2

我希望在用户未登录时显示登录链接,并在用户登录时显示登出链接。我正在使用web.xml中定义的容器管理安全性。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:17)

登录用户的用户名由ExternalContext#getRemoteUser()提供,其HttpServletRequest#getRemoteUser()覆盖了Conditionally displaying JSF components。两者分别由#{facesContext.externalContext.remoteUser}#{request.remoteUser}在EL中提供。如果是null,则表示用户未登录。

因此,在您的视图中,您可以在rendered属性中进行检查,如下所示:

<h:form rendered="#{not empty request.remoteUser}">
    <h:commandLink value="Logout" action="#{auth.logout}" />
</h:form>
<h:link value="Login" outcome="login" rendered="#{empty request.remoteUser}" />

另见:

  • {{3}}

答案 1 :(得分:1)

这取决于您对“登录”的定义。通常,您可以通过实现自己的登录机制登录应用程序中的用户。否则,您正在使用服务器将负责的一些容器相关机制。

对于容器管理方法,您通常可以使用ExternalContext检查FacesContext

FacesContext.getExternalContext().getRemoteUser();

您可以将该方法放入辅助bean中,并使用链接组件的rendered属性进行检查。

如果您实施自己的系统,完全取决于您。

答案 2 :(得分:0)

您可以检查会话以了解是否已登录(如果您使用会话来管理登录信息)。假设您使用密钥user存储了用户信息,这是一个示例:

<%
    String page = "login.jsp";
    String linkName = "Login";

    if (session.getAttribute("user") != null) {
        page = "logout.jsp";
        linkName = "Logout";
    }
%>

<a href="<%=page %>"><%=linkName %></a>