Как проверить, зарегистрирован ли пользователь?

Я хочу, чтобы отображалась ссылка для входа, когда пользователь не вошел в систему и вышла из системы, когда пользователь вошел в систему. Я использую безопасность, управляемую контейнером, как определено в 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>