Как правильно выйти из веб-приложения Java EE 6 после входа в систему
Довольно простое требование. После входа в веб-приложение J2EE 6, как я могу снова выйти из системы?
В большинстве (все?) книги и учебные пособия, которые я видел, показывают, как добавить страницу входа/входа в приложение и продемонстрировать использование принципов безопасности/ролей/областей и т.д., используя метод "j_security_check" - все хорошо. Но тогда непонятно, как дать пользователю возможность выйти из системы. Действительно, как я могу принудительно выйти из системы после, скажем, времени сеанса и т.д.?
Ответы
Ответ 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;
}