Как проверить, вошел ли пользователь в систему?
Я хочу отображать ссылку для входа в систему, когда пользователь не вошел в систему, и ссылку для выхода из системы, когда пользователь вошел в систему. Я использую управляемую контейнером безопасность, как определено в web.xml
,
Как мне этого добиться?
3 ответа
Имя пользователя вошедшего в систему пользователя доступно ExternalContext#getRemoteUser()
который делегирует под прикрытием HttpServletRequest#getRemoteUser()
, Оба доступны в EL #{facesContext.externalContext.remoteUser}
а также #{request.remoteUser}
соответственно. Если это 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}" />
Смотрите также:
Это зависит от вашего определения "вошел в систему". Обычно вы можете войти в систему в своем приложении, внедрив собственный механизм входа. В противном случае вы используете какой-то контейнерозависимый механизм, который будет обслуживать ваш сервер.
Для метода, управляемого контейнером, вы обычно можете проверить FacesContext
с его ExternalContext.
FacesContext.getExternalContext().getRemoteUser();
Вы можете поместить этот метод в вспомогательный компонент и проверить его с помощью rendered
Атрибут вашего компонента ссылки.
Если вы внедряете свою собственную систему, это полностью зависит от вас.
Вы можете проверить сеанс, чтобы узнать, вошел ли он в систему или нет (если вы используете сеанс для управления информацией для входа). Предполагая, что вы сохранили информацию о пользователе с ключом user
Вот пример:
<%
String page = "login.jsp";
String linkName = "Login";
if (session.getAttribute("user") != null) {
page = "logout.jsp";
linkName = "Logout";
}
%>
<a href="<%=page %>"><%=linkName %></a>