Подтвердить что ты не робот

Как правильно выйти из веб-приложения Java EE 6 после входа в систему

Довольно простое требование. После входа в веб-приложение J2EE 6, как я могу снова выйти из системы?

В большинстве (все?) книги и учебные пособия, которые я видел, показывают, как добавить страницу входа/входа в приложение и продемонстрировать использование принципов безопасности/ролей/областей и т.д., используя метод "j_security_check" - все хорошо. Но тогда непонятно, как дать пользователю возможность выйти из системы. Действительно, как я могу принудительно выйти из системы после, скажем, времени сеанса и т.д.?

4b9b3361

Ответ 1

У вас должен быть logout servlet/jsp, который делает недействительным сеанс, используя следующие способы:

  • До Servlet 3.0, используя session.invalidate() method, что также делает недействительным сеанс.
  • Servlet 3.0 предоставляет метод API HttpServletRequest.logout(), который делает недействительным только контекст безопасности, и сеанс все еще существует.

И, пользовательский интерфейс приложения должен предоставлять ссылку, которая вызывает, что logout servlet/jsp

Вопрос: Действительно, как я могу принудительно выйти из системы после, скажем, времени сеанса и т.д.?

Ответ: <session-timeout> в web.xml позволяет определить значение таймаута, после которого сеанс будет недействительным сервером.

Ответ 2

Вы можете сделать это программно, используя logout() -Метод HttpServletRequest. Существует также соответствующий метод входа в систему с именем пользователя и паролем. Эти методы были добавлены в Servlet 3.0, поэтому они доступны в Java EE 6.

Тайм-аут - это другой зверь и может быть указан в web.xml следующим образом:

<session-config>
  <session-timeout>30</session-timeout> 
</session-config>

Единица времени - минуты.

Ответ 3

Двухэтапный процесс -

1.создайте страницу выхода из системы
 2.Создать сеанс bean с помощью метода выхода

ШАГ A: Страница выхода

<div class="mytext">
    <p>Hello #{userSession.username}, </p>
    <p><h:outputText value="It doesn't seem you're logged in anyway..." rendered="#{!userSession.userLoggedIn}" /></p>
</div>
    <h:form class="mytext" rendered="#{userSession.userLoggedIn}" >
        <h:panelGrid columns="2"  >
            <h:outputLabel value="Do you want to logout?" for="logout"  />
            <p:commandButton value="Logout" id="logout" action="#{userSession.logout}" />                                      
        </h:panelGrid>
    </h:form>

ШАГ B: Сессия bean Код поддержки (фрагмент)

public String logout() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    session.invalidate();
    return "/index?faces-redirect=true";
}

public boolean isUserLoggedIn() {
    String user = this.getUsername();
    boolean result = !((user == null)|| user.isEmpty());
    return result;
}

/** Get the login username if it exists */
public String getUsername() {
    String user = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
    return user;
}