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