Как проверить, вошел ли пользователь в систему?

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