我希望在用户未登录时显示登录链接,并在用户登录时显示登出链接。我正在使用web.xml
中定义的容器管理安全性。
我怎样才能做到这一点?
答案 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}" />
答案 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>